什么时候自动合成的赋值操作符不能用

什么时候自动合成的赋值操作符不能用
前一段时间写了类似于这样的一段代码
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,编译器的行为就是,无法编译通过。

后记:希望这次不要再忘记这些内容了。

你可能感兴趣的:(什么时候自动合成的赋值操作符不能用)