
1 timonwong 2013-10-25 17:11:57 +08:00 拷贝构造函数。 A a1 = A(); A a2 = a1; |
2 yujnln 2013-10-25 17:15:32 +08:00 楼上例子错了吧? A a2 = A(a1); A&代表class A对象的引用 |
3 smallghost OP class A { public: A(A&); int i; }; int main() { A a; a.i = 100; A c(a); A b = a; // 这里 c.i 和 b.i 是多少呢? return 0 } |
4 pagict 2013-10-25 17:25:36 +08:00 都是100啊 |
5 dorentus 2013-10-25 17:27:55 +08:00 @yujnln 没错的。 就拿你这个「A a2 = A(a1);」为例,A(a1) 可以理解成把 a1 转型为 A 类型,但是 a1 本身就是 A 的实例,于是直接写 a1 就足够了。 另外如果没有特殊原因,拷贝构造函数最好写成这样吧:A(const A&); 这样写你就表明了你这个函数里面不会对传入的参数作修改。 |
6 66beta 2013-10-25 18:20:23 +08:00 复制/拷贝构造函数 A&表示一个A类对象的引用 函数参数分为:传值和传引用(地址) 上周刚考过C++,我感觉能过 XD |
7 Golevka 2013-10-25 18:45:14 +08:00 C++ 11又多了一个move constructor (A::A(A &&)), 于是情形变得乱上加乱. "Only a computer scientist would create a copy, and then destroy the original" --Bjarne Stroustrup on GoingNative 2013 Keynote |
9 jiangtao92 2013-10-27 18:36:03 +08:00 如果你要表达的是复制构造函数的话,至少是应该这样 A(const A & copy) 为什么是 A(const A & copy) 而不是 A(const A copy) c++ 的复制构造函数 在实参传到形参(非引用类型)的时候 会被隐式的调用 比如: A a1; A a2(a1);// 如果你是A(const A copy) 就是无限的递归调用 A(const A & copy) 因为是引用类型,不会隐式的调用复制构造函数. |