我有一个关于常量对象的问题。在下面的程序中:
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的尝试都会导致错误,但是程序对我来说运行得很好。我想我在这里有些困惑,谁能告诉我为什么编译器没有把它标记为错误?
发布于 2010-04-04 04:39:22
通过写作
int a = 19;在print()中,您声明了一个新的局部变量a。这与您在类const_check中声明的int a无关。成员变量被称为局部变量的影子。而且,在const函数中声明局部变量并修改它们是完全没有问题的;const规则只适用于对象的字段。
试着写
a = 19;相反,您会看到出现一个错误。
发布于 2010-04-04 04:40:30
您将在每个方法中创建一个局部变量a,而不是更改实例变量a。
发布于 2010-04-04 04:40:28
您不能在print()或print2()中更改成员变量a。您声明了一个新的局部变量a,它隐藏了成员变量a。
https://stackoverflow.com/questions/2572586
复制相似问题