你的文章没有解决我的问题哦。。。
我的问题实际上是 a=1 这句话干了些什么:是(1)还是(2)呢?
(1)调用了 A(1), 生成a.
(2)调用了A(1), 生成了一个temporary object, 然后 “=”调用了copy constructor,
把temporary object 复制给a.
如果是(1),那么code2 应该不报错。实际上如果把 a=1 改成 a(1) 就能够顺利编译。
如果是(2),code2 应该报错,因为 A(A&) 屏蔽了系统自动给的copy constructor,
但是它的参数没法匹配 temporary object, 因为temp 都是 const 的。所以 code3 里
改成了 A(const A&). 但是输出结果显示copy constructor 根本没有被调用过。所以
不解。
感觉上compiler应该是能优化的,所以他的行为比较可能是(1),但是这样应该不报
错,所以不解阿