返回临时变量的效率问题
考虑这样一个类:
- 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个有何困难
[解决办法]
++
另外这作为简单类型,默认优化编译得出的结果两者应该也没什么差别。