c ++中的const对象

时间:2010-04-03 20:36:01

标签: c++ const

我对常量对象有疑问。在以下程序中:

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的尝试都会导致错误,但程序运行正常我。我想我在这里有些困惑,有人能告诉我为什么编译器没有将它标记为错误吗?

4 个答案:

答案 0 :(得分:21)

写作

int a = 19;

print()内,您声明了一个新的局部变量a。这与您在类int a中声明的const_check无关。成员变量被局部变量称为 shadowed 。在const函数中声明局部变量并修改它们是完全可以的; const只适用于对象的字段。

尝试写作

a = 19;

相反,看到出现错误。

答案 1 :(得分:4)

您没有更改在每个方法中创建局部变量a的实例变量a

答案 2 :(得分:1)

您没有在print()或print2()中更改成员变量a。您正在声明一个新的局部变量a,它隐藏了成员变量a。

答案 3 :(得分:-1)

另外,除非我弄错了,否则你忘了实际声明成员变量const开头。