cv限定符和隐式类型转换

时间:2011-07-20 14:07:04

标签: c++

在代码中,

const int x = 3;
int y = 0;
y += x;

是否需要在添加之前从x中删除const,或者这可能是在加法运算符定义中隐式执行的?

3 个答案:

答案 0 :(得分:5)

首先,+=运算符是赋值运算符(复合赋值)。它的行为相当于y = y + x组合(除了y只评估一次)。

其次,当用作加法运算符的操作数(包括示例中的+=的RHS)时,x作为 rvalue 参与表达式,即它隐含地受到所谓的左值到右值的转换。此转换会立即丢弃const,因为非类类型的rvalues(在您的情况下为int)无法通过cv限定。

答案 1 :(得分:0)

隐式完成,因为您不会更改x

答案 2 :(得分:0)

如果仅在给定代码段中使用const,则无需删除x

const修饰符将一个变量标记为保留只读数据。如果编译器发现您正在修改它,它会生气并报告错误。对于所有其他用途,const将被删除。

在您的情况下,您不会修改x,因此无需const删除。