C++ cv限定符和隐式类型转换
在守则中,C++ cv限定符和隐式类型转换,c++,C++,在守则中, const int x = 3; int y = 0; y += x; 在进行加法之前是否需要从x中删除常量,或者这可能在加法运算符定义中隐式完成?隐式完成,因为您不打算更改x隐式完成,因为您不打算先更改x,+=运算符是赋值运算符(复合赋值)。但其行为相当于y=y+x组合(除了y只计算一次) 其次,当用作加法运算符的操作数时(包括示例中的+=的RHS),x作为右值参与表达式,即隐式进行所谓的左值到右值转换。由于非类类型的右值(int,在您的情况下)不能被cv限定,因此此转换立即丢弃
const int x = 3;
int y = 0;
y += x;
在进行加法之前是否需要从x中删除常量,或者这可能在加法运算符定义中隐式完成?隐式完成,因为您不打算更改
x
隐式完成,因为您不打算先更改x
,+=
运算符是赋值运算符(复合赋值)。但其行为相当于y=y+x
组合(除了y
只计算一次)
其次,当用作加法运算符的操作数时(包括示例中的
+=
的RHS),x
作为右值参与表达式,即隐式进行所谓的左值到右值转换。由于非类类型的右值(int
,在您的情况下)不能被cv限定,因此此转换立即丢弃const
。首先,+=
运算符是赋值运算符(复合赋值)。但其行为相当于y=y+x
组合(除了y
只计算一次)
其次,当用作加法运算符的操作数时(包括示例中的
+=
的RHS),x
作为右值参与表达式,即隐式进行所谓的左值到右值转换。由于非类类型的右值(int
,在您的情况下)不能进行cv限定,因此此转换将立即丢弃const
。如果仅在给定代码段中使用x
,则无需删除const
const
修饰符将一个变量标记为保存只读数据。如果编译器看到您正在修改它,它会生气并报告错误。对于所有其他用途,const
被删除
在您的情况下,您没有修改
x
,因此不需要删除const
。如果x
仅在给定代码段中使用,则不需要删除const
const
修饰符将一个变量标记为保存只读数据。如果编译器看到您正在修改它,它会生气并报告错误。对于所有其他用途,const
被删除
在您的情况下,您没有修改
x
,因此不需要删除const
。如果您在删除const
后试图修改x
,运行时可能会生气:)如果删除const
:)后试图修改x
,运行时可能会生气谢谢,正是我想要的解释。谢谢,正是我想要的解释。