读书人

返回临时变量的效率有关问题

发布时间: 2012-05-15 14:35:29 作者: rapoo

返回临时变量的效率问题
考虑这样一个类:

C/C++ code
class Vec3 {public:    Vec3(float a, float b, float c): a(a), b(b), c(c) {}    float a;    float b;    float c;}


然后这两个函数,执行一样的算法,但是一个把结果的存放位置传进来,另一个返回结果:
C/C++ code
void some_op(Vec3& result);Vec3 some_op();

那么,第一个的效率是不是一定更高?

[解决办法]
显然是第一个,因为不需要返回,而第二个返回的是一个对象,那么就涉及到拷贝构造函数的调用。而且还有临时变量的构造和析构。额外的增加了这么多的开销。效率显然降低了
[解决办法]
看编译器优化的水平,(N)RVO最喜欢的就是这种POD类型了
PS:一个xmm寄存器能放4个float,返回3个有何困难
[解决办法]
++
另外这作为简单类型,默认优化编译得出的结果两者应该也没什么差别。
探讨

看编译器优化的水平,(N)RVO最喜欢的就是这种POD类型了
PS:一个xmm寄存器能放4个float,返回3个有何困难

读书人网 >C++

热点推荐