繁体   English   中英

c ++编译器会通过`reference`优化掉未使用的返回值吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM