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에 오류나 경고가 없는 이유는 다음과 같습니다.
결론
허용 시 VS2010의 동작 오류나 경고 없이 rvalue에 바인딩되는 const가 아닌 참조는 표준 C가 아니며 확장으로 간주됩니다. 어떤 경우에는 유용할 수 있지만 예상치 못한 동작이 발생할 수도 있으므로 일반적으로 rvalue 바인딩에 const 참조를 사용하는 것을 권장하지 않습니다.
위 내용은 VS2010에서 Non-Const 참조가 Rvalue에 바인딩되는 것을 허용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!