我有一个关于常量对象的问题。在以下程序中:
class const_check{
int a;
public:
const_check(int i) : a(i) {}
void print() const {
int a = 19; // this should be an error, but it compiles
// ...
}
void print2() {
int a = 10; // OK
// ...
}
};
int main() {
const_check b(5);
const const_check c(6);
b.print2();
c.print();
}
void print()
是类const_check
的常量成员函数,因此根据常量的定义,任何更改int a
的尝试都会导致错误,但该程序对我来说运行良好。
为什么编译器没有将其标记为错误?
通过写作
int a = 19;
在
print()
内部,您正在声明一个新的局部变量a
。这与您在类 int a
中声明的 const_check
无关。成员变量被认为是被局部变量“遮蔽”的。在 const
函数中声明局部变量并修改它们是完全可以的; const
ness 仅适用于对象的字段。尝试写作
a = 19;
相反,会看到出现错误。
a
您正在每个方法中创建一个局部变量
a
。