컴파일러 경고(수준 1) C4350
동작 변경: 'member1'이 'member2' 대신 호출됩니다.
rvalue는 const가 아닌 참조에 바인딩할 수 없습니다. Visual Studio 2003 이전의 Visual C++ 버전에서는 직접 초기화에서 rvalue를 const가 아닌 참조에 바인딩할 수 있었습니다. 이제 이 코드는 경고를 제공합니다.
이전 버전과의 호환성을 위해 rvalues를 비 const 참조에 바인딩할 수 있지만 가능한 경우 표준 변환을 사용하는 것이 좋습니다.
이 경고는 Visual C++ .NET 2002 컴파일러의 동작 변경을 나타냅니다. 사용하도록 설정하면 올바른 코드에 대해 이 경고가 제공될 수 있습니다. 예를 들어 std::auto_ptr 클래스 템플릿을 사용할 때 제공될 수 있습니다.
이 경고가 표시되면 코드를 검사하여 rvalue를 비 const 참조에 바인딩하는 데 의존하는지 확인합니다. 참조에 const를 추가하거나 추가 const 참조 오버로드를 제공하면 문제가 해결됩니다.
기본적으로 이 경고는 해제되어 있습니다. 자세한 내용은 Compiler Warnings That Are Off by Default을 참조하세요.
다음 샘플에서는 C4350을 생성합니다.
// C4350.cpp
// compile with: /W1
#pragma warning (default : 4350)
class A {};
class B
{
public:
B(B&){}
// try the following instead:
// B(const B&){}
B(A){}
operator A(){ return A();}
};
B source() { return A(); }
int main()
{
B ap(source()); // C4350
}