前一段时间写了类似于这样的一段代码
class A
{
private:
int *const ptr;
public:
A():ptr(NULL)
{
}
};
A one;
A two;
two = one;
编译时发现,编译器提示说默认赋值操作符不能用,而当我去掉ptr成员的const关键字后,便好了。当时很纳闷这是怎么搞的。
后来在好心人的帮助下,才意识到ptr是个const,所以默认的赋值操作符不能对ptr进行赋值。
唉,当时知道是这个原因后真的是羞涩难当,自己明知道const不能被赋值是常识问题,但当时却死活没能找出原因。
而更要人命的是我之前在
{偶尔学习C++标准} 之 [对象的复制 - 复制构造与赋值操作符] 中就已经对赋值操作符做了一些笔记,但我竟然把一些内容给忘了(也可能是压根就没注意)。
现在重新就自动合成的赋值操作符何时不能使用再单独做一次笔记。
当类中拥有以下一种或几种情况时,隐式定义的赋值操作符是不能使用的:
1.非静态的const成员变量
2.非静态的引用类型成员变量
3.非静态的类类型的成员变量的赋值操作符不可访问
4.(如果有)基类中的赋值操作符不可访问
注,对于拥有以上情况中的一种或多种的类,标准中的用词是:ill-formed。我不知道为什么要用ill-formed(字面意思:不规范),但不管怎样,对于ill-formed,编译器的行为就是,无法编译通过。
后记:希望这次不要再忘记这些内容了。
posted on 2010-05-08 16:21
zhaoyg 阅读(510)
评论(2) 编辑 收藏 引用 所属分类:
C/C++学习笔记