C++ 类为typename的模板变量
我正在学习C++14,在这方面我遇到了这个模板变量特性,我对此很感兴趣,我尝试用多个例子来理解模板变量。说C++ 类为typename的模板变量,c++,templates,c++14,C++,Templates,C++14,我正在学习C++14,在这方面我遇到了这个模板变量特性,我对此很感兴趣,我尝试用多个例子来理解模板变量。说 template <typename T> T var; var<int>; var<float>; 此简单程序不会创建任何临时对象: int main() { var<SomeClass>; } 按这个顺序 #include <iostream> struct noisy { noisy() { std::co
template <typename T>
T var;
var<int>;
var<float>;
此简单程序不会创建任何临时对象:
int main() {
var<SomeClass>;
}
按这个顺序
#include <iostream>
struct noisy {
noisy() { std::cout << __func__ << "()\n"; }
~noisy() { std::cout << __func__ << "()\n"; }
noisy(noisy&&) { std::cout << __func__ << "(&&)\n"; }
noisy(noisy const&) { std::cout << __func__ << "(c&)\n"; }
void operator=(noisy&&) { std::cout << __func__ << "(&&)\n"; }
void operator=(noisy const&) { std::cout << __func__ << "(c&)\n"; }
};
template<class T>
T var;
int main() {
std::cout << "Start of main\n";
{
var<noisy> = noisy{};
std::cout << "Body of main\n";
}
std::cout << "End of main\n";
}
此简单程序不会创建任何临时对象:
int main() {
var<SomeClass>;
}
按这个顺序
#include <iostream>
struct noisy {
noisy() { std::cout << __func__ << "()\n"; }
~noisy() { std::cout << __func__ << "()\n"; }
noisy(noisy&&) { std::cout << __func__ << "(&&)\n"; }
noisy(noisy const&) { std::cout << __func__ << "(c&)\n"; }
void operator=(noisy&&) { std::cout << __func__ << "(&&)\n"; }
void operator=(noisy const&) { std::cout << __func__ << "(c&)\n"; }
};
template<class T>
T var;
int main() {
std::cout << "Start of main\n";
{
var<noisy> = noisy{};
std::cout << "Body of main\n";
}
std::cout << "End of main\n";
}
1. <代码>变量本身并不创建临时对象。2.事实并非如此<代码>变量本身并不创建临时对象。2.没有。
int main() {
var<SomeClass> = SomeClass{};
}
SomeClass::SomeClass()
SomeClass::SomeClass()
SomeClass::operator=(SomeClass&&)
SomeClass::~SomeClass()
SomeClass::~SomeClass()
#include <iostream>
struct noisy {
noisy() { std::cout << __func__ << "()\n"; }
~noisy() { std::cout << __func__ << "()\n"; }
noisy(noisy&&) { std::cout << __func__ << "(&&)\n"; }
noisy(noisy const&) { std::cout << __func__ << "(c&)\n"; }
void operator=(noisy&&) { std::cout << __func__ << "(&&)\n"; }
void operator=(noisy const&) { std::cout << __func__ << "(c&)\n"; }
};
template<class T>
T var;
int main() {
std::cout << "Start of main\n";
{
var<noisy> = noisy{};
std::cout << "Body of main\n";
}
std::cout << "End of main\n";
}
noisy()
Start of main
noisy()
operator=(&&)
~noisy()
Body of main
End of main
~noisy()