当有静态的const成员时,赋值运算符?

时间:2012-10-04 18:38:05

标签: c++ loops operator-overloading

我必须写一个类似

的新类
class A
{
    static int i;
    const int j;
    char * str;
    ...
    ...
};

现在我想为它编写赋值运算符。

A& A::operator=(const A& rhs)
{
    if(this != rhs)
    {
        delete [] str;
        str = new char[strlen(rhs.str)+1];
        strcpy(str, rhs.str);
    }
    return * this;
}

是不是?我将忽略static和const成员(?)。

2 个答案:

答案 0 :(得分:9)

赋值运算符将一个对象复制到另一个对象中。由于所有相同类型的对象共享相同的静态成员,因此没有理由复制静态成员。

const成员是另一回事。你不能(好吧,不应该)改变它们,但如果两个对象对const成员有不同的值,那么将一个对象复制到另一个对象可能不是一个好主意。 const成员将没有正确的值。这就是为什么编译器不为具有const成员的类生成复制赋值运算符的原因。因此,首先必须确保复制这样的对象是有意义的,即使const成员的值不正确;然后问问自己为什么它有const成员,如果它们不影响它的行为。

也参考。 (是的,这里有回音)

答案 1 :(得分:5)

静态成员不属于单个对象,因此您无需复制这些成员。

const成员无法更改,因此您无法正确复制。参考文献。