>  기사  >  백엔드 개발  >  VS2010에서 Non-Const 참조가 Rvalue에 바인딩되는 것을 허용하는 이유는 무엇입니까?

VS2010에서 Non-Const 참조가 Rvalue에 바인딩되는 것을 허용하는 이유는 무엇입니까?

DDD
DDD원래의
2024-10-28 03:22:31549검색

Why Does VS2010 Allow Non-Const References to be Bound to Rvalues?

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

C에서는 일반적으로 비상수 참조를 rvalue에 바인딩하는 것이 고려됩니다. 오류. 그러나 Visual Studio 2010에서 다음 코드는 오류나 경고 없이 컴파일됩니다.

<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>

이 동작은 해당 코드에 대해 컴파일 오류나 경고를 발생시키는 GCC 및 VS2008과 같은 다른 컴파일러와 일치하지 않습니다. 이러한 불일치로 인해 VS2010의 버그인지에 대한 의문이 제기되었습니다.

설명

이 경우 VS2010의 동작은 VS 컴파일러의 알려진 확장에 기인합니다. . 역사적으로 이러한 컴파일러에서는 const가 아닌 참조를 명시적인 const 한정 없이 rvalue에 바인딩할 수 있었습니다. 이 동작은 프로그래머의 편의를 위해 도입된 것이며 표준 C 기능으로 간주되지 않습니다.

예제 코드에서 VS2010에 오류나 경고가 없는 이유는 다음과 같습니다.

  • 컴파일러는 foo()의 반환 값을 rvalue로 인식합니다.
  • string& tem 선언을 문자열에 대한 비상수 참조로 해석합니다.
  • 그러나 VS 컴파일러의 확장을 사용하면 참조가 foo()에서 반환된 rvalue에 바인딩될 수 있습니다.

결론

허용 시 VS2010의 동작 오류나 경고 없이 rvalue에 바인딩되는 const가 아닌 참조는 표준 C가 아니며 확장으로 간주됩니다. 어떤 경우에는 유용할 수 있지만 예상치 못한 동작이 발생할 수도 있으므로 일반적으로 rvalue 바인딩에 const 참조를 사용하는 것을 권장하지 않습니다.

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

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