首页 > 后端开发 > C++ > 为什么 Visual Studio 允许非常量引用绑定到临时对象,而 GCC 不允许?

为什么 Visual Studio 允许非常量引用绑定到临时对象,而 GCC 不允许?

Patricia Arquette
发布: 2024-12-22 19:58:10
原创
833 人浏览过

Why Does Visual Studio Allow Non-Const References to Bind to Temporary Objects While GCC Doesn't?

错误:非常量引用绑定到 Visual Studio 中的临时对象

将临时对象分配给非常量对象时,GCC 会引发错误参考。令人惊讶的是,Visual Studio 允许这样做。为什么会出现差异?

解释在于 Visual Studio 中的旧扩展。正如错误报告中所述:“临时对象可以绑定到非常量引用”,Visual Studio 允许将临时对象绑定到非常量引用,即使这可能会导致未定义的行为。

This行为一直备受争议。对错误报告的一个回复指出,此错误有一个 4 级警告,可以使用“/W4”编译器标志启用该警告。

但是,有一种方法可以在 Visual 中将此错误设为错误Studio:使用“/Za”标志禁用语言扩展。如果您想遵守严格的 C 标准并避免潜在有问题的代码行为,这是一个有用的解决方法。

为了说明这一点,请考虑以下示例:

class Zebra { int x; };
Zebra goo() { Zebra z; return z; }
void foo(Zebra &x)
{
    Zebra y;
    x = y;
    foo(goo()); // Error in GCC, allowed in Visual Studio
}
登录后复制

在 Visual Studio 中,此代码将编译没有错误。然而,在 GCC 中,由于临时对象被分配给非常量引用,会产生编译错误。

以上是为什么 Visual Studio 允许非常量引用绑定到临时对象,而 GCC 不允许?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板