我只是在用这段代码尝试引用:
class A
{
};
class B
{
public:
B(A& a): m_a(a){}
A& m_a;
};
int main()
{
A a;
B b(a);
B b1 = b;
}
我本来期望这段代码 B b1 = b;
会产生一个错误,但当我在VS2008中编译时,只得到了一个警告信息:
我知道为什么会收到这个警告,但是难道编译器对于warning C4512: 'B' : assignment operator could not be generated
B b1 = b;
不应该生成一个错误吗?这就像它生成了复制构造函数,但没有生成赋值运算符。这两者不是本质上相互关联的吗?如果一个操作无法生成,是否有意义仅为另一个操作生成默认实现呢?
4.5.0
即使使用-Wall -pedantic
也不会产生任何警告。 - Nawazoperator=
时都会发出警告(因为该类包含引用或常量成员)。GCC则等到您实际尝试使用运算符时才会发出警告。 - Bo Persson