Поделиться через


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

изменение поведения: "член 1" был вызван вместо "член 2"

Значение rvalue не может быть привязано к ссылке, не являющейся константной. В предыдущих версиях Visual C++ можно было при прямой инициализации привязывать значение rvalue к ссылке, не являющейся константной. Данный код выводит предупреждение.

Для обратной совместимости все еще возможно выполнять привязку значений rvalue к ссылкам, не являющимся константными, однако предпочтительно по возможности выполнять стандартные преобразования.

Данное предупреждение представляет изменение поведения в компиляторе Visual C++ .NET 2002. Если данное предупреждение включено, оно может быть выведено и для правильного кода. Например, оно может выводиться при использовании шаблона класса std::auto_ptr.

В случае вывода данного предупреждения необходимо изучить код и проверить его на предмет зависимости от привязки значений rvalue к ссылкам, не являющимся константными. Решить проблему можно с помощью добавления константы к ссылке или предоставления дополнительной перегрузки для ссылки константного типа.

Данное предупреждение по умолчанию отключено. Дополнительные сведения см. в разделе Отключенные по умолчанию предупреждения компилятора.

Следующий пример демонстрирует причины возникновения ошибки 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
}