c – 当复制构造函数开始工作时?
发布时间:2020-12-16 10:13:23 所属栏目:百科 来源:网络整理
导读:#include iostreamusing namespace std;class myclass {public: myclass(); myclass(const myclass o); myclass f();};myclass:: myclass(){ cout"Constructing normally"endl;};myclass:: myclass(const myclass o){ cout"Constructing copy"endl;};myclass
#include <iostream> using namespace std; class myclass { public: myclass(); myclass(const myclass &o); myclass f(); }; myclass:: myclass(){ cout<<"Constructing normally"<<endl; }; myclass:: myclass(const myclass &o){ cout<<"Constructing copy"<<endl; }; myclass myclass::f(){ myclass temp; return temp; }; int main(){ myclass obj; obj = obj.f(); return 0; } 我在一本书中找到了这个例子,该书显示该程序的输出应该是: Constructing normally Constructing normally Constructing copy 但是当我在我的编译器中编译它时,它只显示下面写的输出 Constructing normally Constructing normally 里面究竟发生了什么? 解决方法
你的构造函数有副作用 – 即cout调用.因此编译器无法优化obj = obj.f();中的副本.
但C标准确实允许它优化所采用的深拷贝 myclass myclass::f(){ myclass temp; return temp; }; 尽管有副作用.这种允许的策略称为命名返回值优化. 可悲的是,你的书从一开始就非常过时,或者事实上是不正确的!在即将到来的冬天照亮那些舒适的火焰时,你可以用它来点燃它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- vue2.0 子组件改变props值,并向父组件传值的方法
- ruby-on-rails – simple_form f.hidden_??field有效,为什么
- ruby-on-rails – 如何链接到属于Rails 3中对象的下一个或上
- php与javascript正则匹配中文的方法分析
- flex 如何获得滚动条的宽度
- c – 没有新运算符的Subdivide Quadtree
- grep中的正则表达式包含A,B,C ……但不包含Z的文件
- 【第854期】30 分钟学会 Flex 布局
- ruby-on-rails – Capistrano 3之前和之后的钩子
- .net – DbProviderFactory与Npgsql?
推荐文章
站长推荐
热点阅读