编译器警告(等级 1)C4350

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

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

为了向后兼容,仍可以将 rvalue 绑定到非常量引用,但尽可能首选标准转换。

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

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

默认情况下,此警告处于关闭状态。 有关详细信息,请参阅 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
}