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 중국어 웹사이트의 기타 관련 기사를 참조하세요!