允许非常量引用绑定到右值:VS2010 异常
C 标准严格禁止将非常量引用绑定到右值。然而,在一个奇怪的异常情况中,Visual Studio 2010 (SP1) 编译以下代码时没有任何错误或警告:
<code class="cpp">string foo() { return "hello"; } int main() { string& tem = foo(); // Non-const reference to rvalue }</code>
编译器行为差异
相反,其他编译器表现出更严格的行为:
VS2010 异常解释
这种异常行为VS2010 源于一个已知的编译器扩展。与 GCC 和 Visual Studio 2008 不同,VS2010 在某些情况下允许将非常量引用绑定到右值,例如当右值由返回临时对象的函数生成时。
虽然此扩展违反了标准,它可能是为了方便而实施的。但是,如果在绑定引用后修改右值,则可能会导致未定义的行为。
后果和建议
此扩展可能会将微妙的错误引入依赖于正确遵守 C 标准。因此,强烈建议避免将非常量引用绑定到右值,即使在 VS2010 中也是如此。相反,按照标准的预期,在绑定到右值时始终使用 const 引用。
以上是为什么 Visual Studio 2010 允许非常量引用绑定到右值?的详细内容。更多信息请关注PHP中文网其他相关文章!