[英]Will the c++ compiler optimize away unused return value by `reference`?
有人跳之前说Profile before optimize!
之前的个人Profile before optimize!
,这只是一个好奇的问题,源于这个原始问题 。
如果我通过引用返回相同的对象,如果不使用它会被优化掉吗? 例如,我有一个Vector<>
,它有各种数学函数(假设我没有使用运算符重载)。 两种写作方式:
inline void Vector::Add(const Vector& in) // Adds incoming vector to this vector
要么
inline Vector& Vector::Add(const Vector& in) // Adds incoming vector to this vector and returns a reference to this vector
现在如果在不使用返回值的情况下使用Add()
,编译器是否会完全抛弃返回值并且函数变得好像没有返回值开始? 如果它没有inlined
怎么办?
作为参数或返回语句的引用通常以类似于指针的方式实现,并且成本最小(在大多数情况下可忽略不计)。 根据调用约定,它可以是寄存器中的单个存储。
至于是否可以优化返回,除非编译器内联代码否,否则它不能。 当编译器处理函数时,它不知道调用代码是否会使用return语句,而这反过来意味着它必须总是返回一些东西。
如果函数没有内联,则返回值必须存储在某处,可能是CPU寄存器。 这可能只需要一个寄存器副本。 如果在大多数情况下开销超过单个CPU周期,我会感到惊讶。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.