Visual Studio 中绑定到非常量引用的临时对象
临时对象是否可以绑定到非常量引用的问题一直是程序员争论的话题,特别是在 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()); }
令人惊讶的是,Visual Studio 允许这段代码编译没有错误。然而,gcc 将其视为编译时错误。这种差异引发了将临时对象绑定到非常量引用的有效性问题。
为了解决这个问题,需要注意的是,Microsoft 为其编译器引入了一个扩展,该扩展允许将临时对象绑定到非常量引用。此行为违反了禁止此类绑定的 C 标准。
Microsoft 错误报告“临时对象可以绑定到非常量引用”提供了对此行为的进一步深入了解。它指出此扩展是标准的例外,在 Visual Studio 中默认启用。
但是,错误报告还建议使用禁用语言扩展的“/Za”编译器选项可能会导致编译失败的代码,遵循 C 标准。这表明 Visual Studio 在这种情况下的行为是故意背离标准的。
因此,虽然 Visual Studio 允许将临时对象绑定到非常量引用,但它是背离 C 标准的扩展。严格遵守该标准的编译器在遇到此类代码时会产生错误。建议使用此扩展时谨慎行事,因为它可能会导致意外行为或可移植性问题。
以上是Visual Studio 中的临时对象可以绑定到非常量引用吗?的详细内容。更多信息请关注PHP中文网其他相关文章!