以下内容摘自第13.1.1节。从书“C++总理”,第5版:如何理解直接初始化和复制初始化之间的区别
为了验证上述段落,尤其是声明强调用红色,我写了下面的代码:根据我的理解
#include<iostream>
using namespace std;
class TestClass {
public:
TestClass() :a(7) {
cout << "Default constructor";
}
TestClass(int aa) : a(aa) {
cout << "Constructor" << endl;
}
TestClass(const TestClass & t): a(t.a) {
cout << "Copy constructor" << endl;
}
TestClass & operator=(const TestClass & rhs) {
a = rhs.a;
return *this;
}
int a;
};
int main() {
TestClass t1(1);
TestClass t2 = t1;
}
在书中对复制初始化的描述中,代码首先应该使用默认初始化器创建t2
,然后使用operator=
函数复制右侧操作数t1
。但是当我在Visual Studio 2015中逐行调试时,代码直接进入拷贝构造函数TestClass(const TestClass & t)
。这表明直接初始化和复制初始化实际上在做同样的事情,没有区别。那么,我的理解错了还是这本书是错的?如果我错了,直接初始化和复制初始化之间区别的正确理解是什么?你能给我一个示例代码来展示这种差异吗?非常感谢。
编辑:别人说我的问题可以在this thread回答。但是这个线程只是我所摘录的文本的一个(详细和延长的)重复。它没有回答为什么在实践中(例如,Visual Studio 2015)它不是真的。
http://stackoverflow.com/questions/1051379/is-there-a-difference-in-c-between-copy-initialization-and-direct-initialization – cpplearner