考虑以下声明和初始化C
类型变量的方法:
C c1;
C c2;
c2 = C();
C c3(C());
C c4 = C();
所有这些是否完全相同,或者根据C
的确切定义,其中一些是否有所不同? (假设它有公共默认值和复制构造函数)。
答案 0 :(得分:10)
这些意思是:
C c1; // default constructor
C c2; // default constructor
c2 = C(); // default constructor followed by assignment
C c3(C()); // default constructor possibly followed by copy constructor
C c4 = C(); // default constructor possibly followed by copy constructor
请注意,编译器可以忽略复制构造函数调用。它们是等价的吗? - 好吧,这取决于复制构造函数和赋值运算符的作用。