Operator =在C ++中使用Const属性重载

时间:2018-04-02 09:11:39

标签: c++ operator-overloading

Coplien的表单告诉您重载运算符=。如果您的课程没有const属性,那么这很容易,但是当它没有这个属性时会更复杂。

class MyClass {
    public:
        MyClass( MyClass const & src );
        MyClass( void );
        MyClass( name, age, leggedness );
        ~MyClass( void );

        // Member functions etc...
    private:
        std::string const _name;
        int const         _number_of_leg;
        int               _age;
        // other const and non-const attributes...
}

为这类课程重载操作符=的最佳方法是什么?保持和不保留来自源的const属性值。

1 个答案:

答案 0 :(得分:0)

这取决于成员和赋值运算符的含义。

为什么你的成员首先被声明为const?

如果所有类都应该具有相同的值,那么将其设为val items = listOf("apple", "banana", "kiwifruit") val appleIndex = items.indexOf("apple") // 0 val lastAppleIndex = items.lastIndexOf("apple") // 0 val bananaIndex = items.indexOf("banana") // 1 val orangeIndex = items.indexOf("orange") // -1 将是一种更好的方法(使用更少的内存,因为它只有一个副本)。

如果它不应该改变,这包括它不应该通过分配给其他对象来改变。因此赋值运算符不应该触及它们。但是,这不会创建一个完美的对象副本,这可能不是你想要的最好的东西,也可能是最糟糕的混乱。

在这种情况下,一种选择是禁止转让。