非常量引用绑定到临时:Visual Studio 异常
编译尝试绑定非常量引用的代码时会出现此问题到一个临时对象。虽然 Visual Studio 允许编译此类代码,但其他编译器(例如 gcc)会将其识别为编译错误。
说明
在提供的示例中:
class Zebra {int x;}; Zebra goo() {Zebra z; return z;} void foo(Zebra &x) { Zebra y; x = y; foo(goo()); }
代码尝试将非常量引用(Zebra &x)绑定到函数返回的临时对象 粘性物()。根据 C 标准,这应该会导致编译错误。
Visual Studio 扩展
但是,Visual Studio 有一个旧的扩展允许这种行为。此扩展本质上将对临时对象的引用视为对非临时对象的引用。
引入此扩展是为了支持遗留代码库。但是,它可能会导致意外行为,通常不建议这样做。
推荐方法
要避免这些异常情况,最好使用 /Za 禁用扩展编译器标志。这将确保代码遵循 C 标准,并且不同编译器会一致地处理。
以上是为什么 Visual Studio 编译对临时对象的非常量引用,而其他编译器则不编译?的详细内容。更多信息请关注PHP中文网其他相关文章!