Home > Backend Development > C++ > body text

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

Barbara Streisand
Release: 2024-10-28 10:05:29
Original
151 people have browsed it

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

Visual Studio 2010: Allowing Binding Non-Const Reference to Rvalue

Problem:

In the following code snippet, the Visual Studio 2010 (SP1) compiler compiles successfully without any errors or warnings, even though it appears to be an invalid initialization of a non-const reference to a temporary rvalue:

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

Expected Behavior:

According to the C standard, binding a non-const reference to an rvalue should be considered an error or warning. This is because non-const references should only be bound to lvalues (objects with a permanent address).

VS2010 Behavior:

However, Visual Studio 2010 compilers have historically allowed this practice as an extension to the language. This behavior is not in accordance with the C standard and is generally considered a bug.

Reason:

The reason for this behavior is not entirely clear, but it is thought to be related to the fact that Visual Studio compilers have always been more lenient in terms of error checking and warnings. This laxity may have been introduced intentionally to allow for greater flexibility in writing code, although it does not follow the C standard.

Implications:

This behavior can have implications for code safety and performance. Binding a non-const reference to an rvalue can lead to unexpected results, as the rvalue may be modified or destroyed at any time.

Solution:

The recommended solution is to avoid binding non-const references to rvalues. Instead, use either a const reference (which can bind to both lvalues and rvalues) or a pointer.

The above is the detailed content of Why Does Visual Studio 2010 Allow Binding Non-Const References to Rvalues?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!