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) 因为是引用类型,不会隐式的调用复制构造函数. |