非常量引用绑定到右值:VS2010 异常
在 C 中,通常考虑将非常量引用绑定到右值一个错误。但是,在 Visual Studio 2010 中,以下代码编译时不会出现任何错误或警告:
<code class="cpp">string foo() { return "hello"; } int main() { //below should be illegal for binding a non-const (lvalue) reference to a rvalue string& tem = foo(); //below should be the correct one as only const reference can be bind to rvalue(most important const) const string& constTem = foo(); }</code>
此行为与 GCC 和 VS2008 等其他编译器不一致,后者会对此类代码引发编译错误或警告。这种差异引发了关于它是否是 VS2010 中的错误的疑问。
解释
在这种情况下 VS2010 的行为归因于 VS 编译器中的已知扩展。从历史上看,这些编译器允许将非常量引用绑定到右值,而无需显式 const 限定。引入此行为是为了方便程序员,并不被视为标准 C 功能。
在示例代码中,VS2010 中缺少任何错误或警告可以解释如下:
结论
VS2010 允许的行为绑定到右值且没有错误或警告的非常量引用不是标准 C,而是被视为扩展。虽然它在某些情况下可能很有用,但它也可能导致意外行为,并且通常不鼓励使用 const 引用来绑定到右值。
以上是为什么VS2010允许非常量引用绑定到右值?的详细内容。更多信息请关注PHP中文网其他相关文章!