【菜鸟问题】类的缺省赋值函数什么时候失效啊?
class Test
{
public:
const int j;
Test():j(3){}
};
void main(void)
{
Test t2,t1;
t2=t1; //(1)error C2582: 'Test ' : 'operator = '
//function is unavailable
Test tt=t2;//(2)
}
(1)为什么说赋值函数不能用?一般在什么时候赋值函数就失效了啊?
(2)为什么拷贝构造函数没有问题啊?
编译环境:vc++6.0
谢谢各位大哥大姐叔叔伯伯大妈婶婶。。。。。了
[解决办法]
j是const的,只能初始化,不能赋值.
Test tt=t2;//这是初始化tt,没问题
而
Test t2,t1;//在这里t2已经被初始化了,t2.j==3;
t2=t1; //错误!不能给t2的数据成员const int j赋值!
其实你想一想呀,要是const对象的值还能改变,那const还有什么意义呢?
[解决办法]
问题1:对于内含const members或者reference members的class,编译器是不会隐式生成一个assignment运算符的,这一点在effective c++条款45(第二版)中有说明
问题2:拷贝构造函数并不等同于assignment运算符的,因为它只在构造时候使用