考虑以下声明和初始化
C
类型变量的方法:C c1;
C c2;
c2 = C();
C c3(C());
C c4 = C();
这些是否完全等价,或者某些情况下可能因C
的确切定义而有所不同?(假设它具有公共默认和复制构造函数。)
C
类型变量的方法:C c1;
C c2;
c2 = C();
C c3(C());
C c4 = C();
这些是否完全等价,或者某些情况下可能因C
的确切定义而有所不同?(假设它具有公共默认和复制构造函数。)
这些意味着:
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
c3
和c4
将无法编译,但c2
仍然可以(包括赋值)。那么对于调用func(c2)
呢?这也会因为私有复制构造函数而无法编译吗? - Roman StarkovC c3(C());
与函数声明区分开来。为了避免编译器警告,您可能需要添加额外的括号:C c3((C()));
- a1ex07