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

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

DDD
DDD원래의
2024-11-01 20:57:02520검색

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

Rvalue에 대한 비상수 참조 바인딩 허용: VS2010 예외

C 표준은 rvalue에 대한 비상수 참조 바인딩을 엄격히 금지합니다. 그러나 특이한 예외 현상으로 Visual Studio 2010(SP1)은 오류나 경고 없이 다음 코드를 컴파일합니다.

<code class="cpp">string foo() { return "hello"; }
int main() {
    string& tem = foo(); // Non-const reference to rvalue
}</code>

컴파일러 동작 불일치

반대로, 다른 컴파일러는 더 엄격한 동작을 나타냅니다.

  • GCC는 컴파일 오류를 발생시켜 rvalue에 대한 비const 참조의 불법 바인딩을 올바르게 식별합니다.
  • Visual Studio 2008은 컴파일 경고를 제공합니다. 잠재적인 문제를 인정하지만 컴파일을 진행하도록 허용합니다.

VS2010 예외 설명

VS2010의 이러한 비정상적인 동작은 알려진 컴파일러 확장에서 비롯됩니다. GCC 및 Visual Studio 2008과 달리 VS2010에서는 임시 개체를 반환하는 함수에 의해 rvalue가 생성되는 경우와 같은 특정 경우에 비const 참조를 rvalue에 바인딩할 수 있습니다.

이 확장은 표준을 무시하지만, 편의를 위해 구현되었을 가능성이 높습니다. 그러나 참조가 바인딩된 후 rvalue가 수정되면 정의되지 않은 동작이 발생할 수 있습니다.

결과 및 권장 사항

이 확장은 의존하는 코드에 미묘한 버그를 유발할 수 있습니다. C 표준을 올바르게 준수합니다. 따라서 VS2010에서도 상수가 아닌 참조를 rvalue에 바인딩하지 않는 것이 좋습니다. 대신, 표준에서 의도한 대로 rvalue에 바인딩할 때 항상 const 참조를 사용하세요.

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

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