参考这个问题中报告的代码,我有以下问题,以确保我理解发生了什么.
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;
}
Run Code Online (Sandbox Code Playgroud)
a, b不是常数Integer32,对吗?b = 9调用我的运算符重载=,文字会发生什么9?我的运算符需要一个const int&,而我传递一个文字常量.a = b要求b是const Integer32&,从这里进行铸造Integer32来const Integer32&?c = a + b,都是a,b常量?a,b是非const Integer32,对吗?
是.(我什么都没看到const,是吗?)
b = 9调用我的运算符重载=,文字9会发生什么?我的运算符需要一个const int&,而我传递一个文字常量.
9是一种临时的类型int.除非参考文献,否则不允许临时传递作为参考const.在这种情况下,这是真的,临时的生命周期延长允许Integer32& operator=(const int& x).
a = b要求b为const Integer32&,这里是一个从Integer32到const Integer32&?的转换.
是.隐式转换由编译器完成.
c = a + b,是a,b是否为常数?
这个问题也是如此.首先Integer32 operator+(const Integer32& x)是操作数a和b.(b被隐式转换为const Integer32&)然后Integer32& operator=(const Integer32& x)用操作数c和表达式的结果来完成,a.operator+(b)这是一个临时的Integer32.
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |