我有一个关于常量对象的问题。在以下程序中:
class const_check{
int a;
public:
const_check(int i);
void print() const;
void print2();
};
const_check::const_check(int i):a(i) {}
void const_check::print() const {
int a=19;
cout<<"The value in a is:"<<a;
}
void const_check::print2() {
int a=10;
cout<<"The value in a is:"<<a;
}
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
。这与您在 const_check
类中声明的 int a
无关。据说成员变量被局部变量隐藏。在 const
函数中声明局部变量并修改它们是完全没问题的; const
仅适用于对象的字段。
尝试写作
a = 19;
相反,会看到错误出现。
关于c++ - C++ 中的 const 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2572586/