Rvalue에 대한 비상수 참조 바인딩 허용: VS2010 예외
C 표준은 비상수 참조를 rvalue에 바인딩하는 것을 엄격히 금지합니다. 그러나 특이하게도 Visual Studio 2010(SP1)에서는 오류나 경고 없이 다음 코드를 컴파일합니다.
string foo() { return "hello"; }
int main() {
string& tem = foo(); // Non-const reference to rvalue
}
컴파일러 동작 불일치
반대로 다른 컴파일러는 더 엄격한 동작을 나타냅니다.
VS2010 변칙 설명
VS2010의 이러한 비정상적인 동작은 알려진 컴파일러 확장에서 비롯됩니다. GCC 및 Visual Studio 2008과 달리 VS2010에서는 임시 개체를 반환하는 함수에 의해 rvalue가 생성되는 경우와 같은 특정 경우에 non-const 참조를 rvalue에 바인딩할 수 있습니다.
이 확장은 표준을 무시하지만, 편의를 위해 구현되었을 가능성이 높습니다. 그러나 참조가 바인딩된 후 rvalue가 수정되면 정의되지 않은 동작이 발생할 수 있습니다.
결과 및 권장 사항
이 확장은 다음을 사용하는 코드에 미묘한 버그를 유발할 수 있습니다. C 표준을 올바르게 준수합니다. 따라서 VS2010에서도 상수가 아닌 참조를 rvalue에 바인딩하지 않는 것이 좋습니다. 대신, 표준에서 의도한 대로 rvalue에 바인딩할 때 항상 const 참조를 사용하세요.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3