Предупреждение компилятора (уровень 1) C4350Compiler Warning (level 1) C4350

изменение поведения: "член 1" был вызван вместо "член 2"behavior change: 'member1' called instead of 'member2'

Rvalue не может быть привязан к ссылке, не являющейся константной.An rvalue cannot be bound to a non-const reference. В версиях Visual C++ до Visual Studio 2003 можно было привязать rvalue к неконстантной ссылке при прямой инициализации.In versions of Visual C++ before Visual Studio 2003, it was possible to bind an rvalue to a non-const reference in a direct initialization. Теперь этот код выдает предупреждение.This code now gives a warning.

Для обеспечения обратной совместимости по-прежнему можно привязывать rvalue к неконстантным ссылкам, однако стандартные преобразования предпочтительнее везде, где это возможно.For backward compatibility, it is still possible to bind rvalues to non-const references, but standard conversions are preferred wherever possible.

Это предупреждение отражает изменение поведения компилятора Visual C++ .NET 2002.This warning represents a change of behavior from the Visual C++ .NET 2002 compiler. Если этот параметр включен, это предупреждение может быть предоставлено для правильного кода.If enabled, this warning could possibly be given for correct code. Например, он может быть задан при использовании шаблона класса std:: auto_ptr .For example, it could be given when using the std::auto_ptr class template.

Если вы получаете это предупреждение, проверьте код, чтобы узнать, зависит ли он от привязки rvalue к ссылкам, не являющимся константными.If you get this warning, examine your code to see if it depends on binding rvalues to non-const references. Добавление константы в ссылку или предоставление дополнительной перегруженной ссылки может решить проблему.Adding a const to the reference or providing a additional const-reference overload may solve the problem.

Это предупреждение отключено по умолчанию.This warning is off by default. Дополнительные сведения см. в разделе Compiler Warnings That Are Off by Default.For more information, see Compiler Warnings That Are Off by Default.

Следующий пример приводит к возникновению ошибки C4350:The following sample generates 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
}