编译器警告(等级 1)C4350

更新:2007 年 11 月

错误消息

行为更改: 调用了“member1”而不是“member2”

rvalue 不能绑定到非常量引用。在以前版本的 Visual C++ 中,直接初始化时有可能将 rvalue 绑定到非常量引用。现在,此代码将给出警告。

对于向后兼容性,仍然有可能将 rvalues 绑定到非常量引用,但仍然尽可能首选标准转换。

此警告表示 Visual C++ .NET 2002 编译器行为的更改。如果启用,对于正确代码可能给出此警告。例如,使用 std::auto_ptr 类模板时可能给出此警告。

如果收到此警告,请检查代码,以查看代码是否依赖于 rvalues 到非常量引用的绑定。将常量添加到引用或提供附加的常量引用重载可能会解决该问题。

默认情况下关闭此警告。有关更多信息,请参见默认情况下处于关闭状态的编译器警告

下面的示例生成 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
}