首页 >后端开发 >C++ >为什么 Visual Studio 编译对临时对象的非常量引用,而其他编译器则不编译?

为什么 Visual Studio 编译对临时对象的非常量引用,而其他编译器则不编译?

Linda Hamilton
Linda Hamilton原创
2024-12-25 20:24:13181浏览

Why Does Visual Studio Compile Non-Constant References to Temporaries While Other Compilers Don't?

非常量引用绑定到临时: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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn