Sam*_*rsa 10 c++ reference return-value-optimization
在有人跳过并说Profile before optimize!,这只是一个好奇的问题,源于这个原始问题.
如果我通过引用返回相同的对象,如果不使用它会被优化掉吗?例如,我有一个Vector<>具有各种数学函数(假设我没有使用运算符重载).两种写作方式:
inline void Vector::Add(const Vector& in) // Adds incoming vector to this vector
Run Code Online (Sandbox Code Playgroud)
要么
inline Vector& Vector::Add(const Vector& in) // Adds incoming vector to this vector and returns a reference to this vector
Run Code Online (Sandbox Code Playgroud)
现在如果Add()在不使用返回值的情况下使用,编译器是否会完全抛弃返回值并且函数变得好像没有返回值开始?如果不是inlined呢?
Dav*_*eas 11
作为参数或返回语句的引用通常以类似于指针的方式实现,并且成本最小(在大多数情况下可忽略不计).根据调用约定,它可以是寄存器中的单个存储.
至于是否可以优化返回,除非编译器内联代码否,否则它不能.当编译器处理函数时,它不知道调用代码是否会使用return语句,而这反过来意味着它必须总是返回一些东西.