>백엔드 개발 >C++ >Visual Studio 2010에서 Rvalue에 대한 Non-Const 참조 바인딩을 허용하는 이유는 무엇입니까?

Visual Studio 2010에서 Rvalue에 대한 Non-Const 참조 바인딩을 허용하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-28 10:05:29211검색

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

Visual Studio 2010: Rvalue에 대한 비상수 참조 바인딩 허용

문제:

다음 코드 조각에서 Visual Studio 2010(SP1) 컴파일러는 임시 rvalue에 대한 비상수 참조의 잘못된 초기화로 나타나더라도 오류나 경고 없이 성공적으로 컴파일합니다.

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

예상 동작:

C 표준에 따르면 상수가 아닌 참조를 rvalue에 바인딩하는 것은 오류 또는 경고로 간주되어야 합니다. 이는 non-const 참조가 lvalue(영구 주소가 있는 개체)에만 바인딩되어야 하기 때문입니다.

VS2010 동작:

그러나 Visual Studio 2010 컴파일러는 역사적으로 이 관행을 언어의 확장으로 허용했습니다. 이 동작은 C 표준을 따르지 않으며 일반적으로 버그로 간주됩니다.

이유:

이 동작의 이유는 완전히 명확하지는 않지만, 이는 Visual Studio 컴파일러가 오류 검사 및 경고 측면에서 항상 더 관대했다는 사실과 관련이 있는 것으로 생각됩니다. 이러한 느슨함은 C 표준을 따르지 않지만 코드 작성 시 더 큰 유연성을 허용하기 위해 의도적으로 도입되었을 수 있습니다.

의미:

이 동작은 의미가 있을 수 있습니다. 코드 안전과 성능을 위해. 상수가 아닌 참조를 rvalue에 바인딩하면 rvalue가 언제든지 수정되거나 삭제될 수 있으므로 예상치 못한 결과가 발생할 수 있습니다.

해결책:

권장 해결 방법 const가 아닌 참조를 rvalue에 바인딩하지 않는 것입니다. 대신 const 참조(lvalue와 rvalue 모두에 바인딩할 수 있음)나 포인터를 사용하세요.

위 내용은 Visual Studio 2010에서 Rvalue에 대한 Non-Const 참조 바인딩을 허용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.