Udostępnij za pośrednictwem


Ostrzeżenie kompilatora (poziom 1) C4350

zmiana zachowania: wywołano element członkowski 'członek1' zamiast 'członek2'

Nie można powiązać wartości rvalue z odwołaniem niekonsekstowym. W wersjach programu Visual C++ przed programem Visual Studio 2003 możliwe było powiązanie wartości rvalue z odwołaniem niekonsekstowym w bezpośredniej inicjalizacji. Ten kod wyświetla teraz ostrzeżenie.

W przypadku zgodności z poprzednimi wersjami nadal można powiązać wartości rvalue z odwołaniami innych niż const, ale w miarę możliwości preferowane są konwersje standardowe.

To ostrzeżenie reprezentuje zmianę zachowania kompilatora visual C++ .NET 2002. Jeśli to ostrzeżenie zostanie włączone, może zostać podane dla poprawnego kodu. Można na przykład podać go podczas korzystania z szablonu klasy std::auto_ptr .

Jeśli zostanie wyświetlone to ostrzeżenie, sprawdź kod, aby sprawdzić, czy zależy to od powiązania wartości rvalue z odwołaniami innych niż const. Dodanie const do odwołania lub podanie dodatkowego przeciążenia const-reference może rozwiązać problem.

To ostrzeżenie jest domyślnie wyłączone. Aby uzyskać więcej informacji, zobacz Ostrzeżenia kompilatora, które są domyślnie wyłączone.

Poniższy przykład generuje 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
}