以下內容摘自第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