求教函数的值传递,编译器为什么修改函数声明?解决方法
求教函数的值传递,编译器为什么修改函数声明?
书:深度探索C++对象模型里有一个例子:
函数声明:void foo( X x0 );
然后这样调用:
X xx;
foo( xx );
书里说编译器内部转换为:
X __temp0;
__temp0.X::X ( xx );
foo( __temp0 );
最后说这样不行,仍然存在一个问题:函数声明要改变:void foo( X& x0 );
原因是临时对象先调拷贝函数,然后》
then is bitwise copied into the local instance of x0!
1》看不懂,这是什么意思?
2》现在的编译器还是这种策略吗?
------解决方案--------------------
原书foo函数有个X类型的返回值吧;这是编译器做得NRV优化;进行拷贝构造后再进行位拷贝到x0中;
现在的编译器只是在某些特殊的情况下有这种策略;
------解决方案--------------------
------解决方案--------------------
哈哈,搞了半天这句我理解错了
------解决方案--------------------
------解决方案--------------------
今天很高兴,学会了收藏,还看到自己熬成长工了,以后我要发50分以上的帖子。
借楼主宝地用一下,同乐同乐! 本想删除L27, L28,L29 愚蠢发言,但编辑不了,就留着算自己的
一个脚印吧。搞乱了这里气氛,不过楼主问题应该解决了吧 ?
书:深度探索C++对象模型里有一个例子:
函数声明:void foo( X x0 );
然后这样调用:
X xx;
foo( xx );
书里说编译器内部转换为:
X __temp0;
__temp0.X::X ( xx );
foo( __temp0 );
最后说这样不行,仍然存在一个问题:函数声明要改变:void foo( X& x0 );
原因是临时对象先调拷贝函数,然后》
then is bitwise copied into the local instance of x0!
1》看不懂,这是什么意思?
2》现在的编译器还是这种策略吗?
------解决方案--------------------
原书foo函数有个X类型的返回值吧;这是编译器做得NRV优化;进行拷贝构造后再进行位拷贝到x0中;
现在的编译器只是在某些特殊的情况下有这种策略;
------解决方案--------------------
------解决方案--------------------
哈哈,搞了半天这句我理解错了
------解决方案--------------------
------解决方案--------------------
今天很高兴,学会了收藏,还看到自己熬成长工了,以后我要发50分以上的帖子。
借楼主宝地用一下,同乐同乐! 本想删除L27, L28,L29 愚蠢发言,但编辑不了,就留着算自己的
一个脚印吧。搞乱了这里气氛,不过楼主问题应该解决了吧 ?