Home > Article > Backend Development > Why Does VS2010 Allow Non-Const References to be Bound to Rvalues?
Non-const Reference Binding to Rvalue: A VS2010 Anomaly
In C , binding a non-const reference to an rvalue is generally considered an error. However, in Visual Studio 2010, the following code compiles without any errors or warnings:
<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>
This behavior is inconsistent with other compilers like GCC and VS2008, which raise compile errors or warnings for such code. This discrepancy has raised questions about whether it is a bug in VS2010.
Explanation
The behavior of VS2010 in this case is attributed to a known extension in the VS compilers. Historically, these compilers have allowed non-const references to be bound to rvalues without explicit const qualification. This behavior was introduced as a convenience for programmers and is not considered a standard C feature.
In the example code, the lack of any errors or warnings in VS2010 can be explained as follows:
Conclusion
The behavior of VS2010 in allowing non-const references to be bound to rvalues without errors or warnings is not standard C and is considered an extension. While it may be useful in some cases, it can also lead to unexpected behavior and is generally discouraged in favor of using const references for binding to rvalues.
The above is the detailed content of Why Does VS2010 Allow Non-Const References to be Bound to Rvalues?. For more information, please follow other related articles on the PHP Chinese website!