C++ C++;关于模板中的泛型初始化
我正在编写一个通用函数,如下所示C++ C++;关于模板中的泛型初始化,c++,templates,initialization,generic-programming,function-templates,C++,Templates,Initialization,Generic Programming,Function Templates,我正在编写一个通用函数,如下所示 template<class Iterator, class T> void foo(Iterator first, Iterator last) { T a; cout << a << endl; // do something with iterators } typedef vector<double>::iterator DblPtr; vector<double> v
template<class Iterator, class T>
void foo(Iterator first, Iterator last) {
T a;
cout << a << endl;
// do something with iterators
}
typedef vector<double>::iterator DblPtr;
vector<double> values;
foo< DblPtr, int>();
我可以看到初始化值是0
,正如我所期望的那样
如果我调用ta
变量将用默认值初始化,但是如果我调用ta=T()
我认为由于优化,应该使用T()
值调用复制构造函数,这仍然是默认值
我无法理解这两行后面的区别以及发生这种情况的原因是什么?首先,内置类型(如
int
的默认初始化使它们未初始化。值初始化会使它们初始化为零。至于你的例子
这是默认初始化:
T a;
这是一个值初始化,使用:
您是对的,这里可以省略副本,因此这具有创建单个值初始化T
对象的效果。但是,它确实要求T
可复制或移动可复制。内置类型就是这种情况,但要记住这是一个限制
复制初始化语法是必需的,因为这是一个函数声明:
T a();
但是C++11允许您像这样初始化值:
T a{};
T a();
T a{};