【发布时间】:2021-02-10 00:54:45
【问题描述】:
我正在学习 C++14,因为遇到了这个模板变量特性,这让我很感兴趣,因此我想对此进行更多研究,我尝试使用多个示例来理解模板变量。说,
template <typename T>
T var;
var<int>;
var<float>;
上面的代码有效,而且看起来也很容易理解。但是,当我尝试使用类名代替 int 或 float 时,会导致为 FOO 类调用临时对象创建,并为临时对象调用相应的 C'tor & dtor。
var<FOO>; //FOO is a class
我编写了一个示例测试程序及其输出供您理解。我的问题是,
- 为什么 var 创建临时对象?
- 原始数据类型和用户定义数据类型的模板变量有何不同?
如果不相关或重复,请指出出处以便清楚理解。
参考下面的代码,
class B
{
public:
B()
{
std::cout<<"\nB ctor"<<std::endl;
}
B(const B& obj)
{
std::cout<<"B copy ctor"<<std::endl;
}
int operator()()
{
std::cout<<"operator() called"<<std::endl;
}
void f() {
//::A().print();
}
~B()
{
std::cout<<"\n~ for B()"<<std::endl;
}
};
//Declaring template variable
template<typename T>
T g ;
int main() {
g<int> = 30;
g<float> = 30.02f;
g<B> = B{};
std::cout<<"g value:"<<g<int><<std::endl;
std::cout<<"g value:"<<g<float>;
}
输出:
B ctor g value:30 g value:30.02 ~ for B()
【问题讨论】:
-
1.
var本身不会创建临时对象。 2. 没有。