理解一些涉及const类型的C ++代码。

时间:2016-11-07 10:45:07

标签: c++ c++11

参考this question中报告的代码,我有以下问题,以确保我理解正在发生的事情。

class Integer32 {
public:
    Integer32() {
        this->setData(0);
    }
    Integer32(const Integer32& x) {
        this->setData(x.getData());
    }
    Integer32(int data) {
        this->data = data;
    }
    Integer32& operator=(const Integer32& x) {
        if (this != &x) {
            this->setData(x.getData());
        }
        return *this;
    }
    Integer32& operator=(const int& x) {
        this->setData(x);
        return *this;
    }
    Integer32 operator+(const Integer32& x) const {
        return Integer32(this->getData() + x.getData());
    }
    void setData(int data) {
        this->data = data;
    }
    int getData() const {
        return data;
    }
private:
    int data;
};

int main(int argc, char** argv) {
    Integer32 a, b, c;
    a = 7;
    b = 9;
    a = b;
    c = a + b;
    return 0;
}
  1. a, b是非const Integer32,对吧?
  2. b = 9调用我的运算符重载=,文字9会发生什么?我的运算符需要const int&,而我传递的是文字常量。
  3. a = b要求bconst Integer32&,这是从Integer32const Integer32&执行的投射?
  4. c = a + ba,b是否已转换为常量?

1 个答案:

答案 0 :(得分:5)

  

a,b是非const Integer32,对吧?

是。 (我在任何地方都看不到const,你呢?)

  

b = 9调用我的运算符重载=,文字9会发生什么?我的   运算符需要一个const int&,而我传递一个文字常量。

9int类型的临时版。除非引用为const,否则临时传递不允许作为参考传递。在这种情况下,这是真的,临时的生命周期延长,允许Integer32& operator=(const int& x)

  

a = b要求b为const Integer32&amp ;,这是一个执行的转换   从Integer32到const Integer32&?

是。隐式转换由编译器完成。

  

c = a + b,是a,b是否为常数?

同样适用于这个问题。首先Integer32 operator+(const Integer32& x)使用操作数ab完成。 (b隐式转换为const Integer32&)然后Integer32& operator=(const Integer32& x)使用操作数c完成,表达式a.operator+(b)的结果是临时Integer32