|
发表于 2008-12-23 20:31:58
|
显示全部楼层
Post by x11;1928496
其实4楼才是正解
fun2返回的是rvalue,而你的赋值操作符要求的参数是lvalue
不过赋值操作符的参数一般都用const reference
另外我还试了
Test t4 = fun2(),在fun2里返回了一个val初始化为2的对象
结果发现t4.val也初始化为2,但是调用的不是拷贝构造,打印的是"con."
看gcc的帮助文档,找到这样一段
-fno-elide-constructors
The C++ standard allows an implementation to omit creating a tempo-
rary which is only used to initialize another object of the same
type. Specifying this option disables that optimization, and
forces G++ to call the copy constructor in all cases.
加上这个编译,就能看到拷贝构造函数的调用了
- [zhanglei@redhat9:/tmp]$ g++ -fno-elide-constructors test.cpp -o test
- [zhanglei@redhat9:/tmp]$ ./test
- con.
- copy con.
- copy con.
复制代码 |
|