读书人

c++primer学习复制统制中的疑问

发布时间: 2013-04-21 21:18:07 作者: rapoo

c++primer学习复制控制中的疑问



图中的黄色方框框住的对应代码部分用/**/注释的方法调用结果。

按照书中的理解,在func3()调用将会分几个步奏完成:
1、创建局部变量obj,调用Test类的默认构造函数;
2、返回时调用Test类的复制构造函数创建一个作为返回值的副本;
3、撤销func3中创建的局部对象obj,调用Test类的析构函数;
4、调用Test类的赋值操作符operator=;
5、赋值完毕后,调用析构函数,撤销返回值的副本。

实际结果如图,想了半天没理解这是为什么。

测试环境:Win7 64bit IDE用的是codeblocks,编译器MinGW。
是否是编译器做了优化,如果是编译器做了优化,该如何去掉这个优化(因为我想试验我的理解是否正确,如果编译器做了优化会影响到我的学习和理解)。
[解决办法]
显然是 RVO 优化.
[解决办法]
ROV 是编译器优化的.
MinGW 只是你的运行环境, 你的编译器还是 gcc 吧, 用 -fno-elide-constructors 可以去掉 ROV 优化.

读书人网 >C++

热点推荐