컴파일러 경고(수준 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
}