首页 >后端开发 >C++ >为什么 Visual Studio 2010 允许将非常量引用绑定到右值?

为什么 Visual Studio 2010 允许将非常量引用绑定到右值?

Barbara Streisand
Barbara Streisand原创
2024-10-28 10:05:29213浏览

Why Does Visual Studio 2010 Allow Binding Non-Const References to Rvalues?

Visual Studio 2010:允许绑定非常量引用右值

问题:

在以下代码片段中,Visual Studio 2010 (SP1) 编译器成功编译,没有任何错误或警告,即使它看起来是对临时右值的非常量引用的无效初始化:

<code class="cpp">string foo() { return "hello"; }
int main()
{
    string& tem = foo(); // Should be illegal
}</code>

预期行为:

根据 C 标准,将非常量引用绑定到右值应被视为错误或警告。这是因为非常量引用只能绑定到左值(具有永久地址的对象)。

VS2010 行为:

但是,Visual Studio 2010 编译器历史上有允许这种做法作为语言的扩展。此行为不符合 C 标准,通常被认为是一个错误。

原因:

此行为的原因尚不完全清楚,但它是这被认为与 Visual Studio 编译器在错误检查和警告方面始终更加宽松这一事实有关。这种宽松性可能是故意引入的,以便在编写代码时提供更大的灵活性,尽管它不遵循 C 标准。

含义:

此行为可能会产生影响为了代码安全和性能。将非常量引用绑定到右值可能会导致意外结果,因为右值可能随时被修改或销毁。

解决方案:

推荐的解决方案是为了避免将非常量引用绑定到右值。相反,请使用 const 引用(可以绑定到左值和右值)或指针。

以上是为什么 Visual Studio 2010 允许将非常量引用绑定到右值?的详细内容。更多信息请关注PHP中文网其他相关文章!

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