c ++中的const对象

Jon*_*ony 4 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();
}
Run Code Online (Sandbox Code Playgroud)

void print()是类的常量成员函数const_check,因此根据常量的定义,任何更改尝试都会int a导致错误,但程序对我来说很好.我想我在这里有些困惑,任何人都可以告诉我为什么编译器没有将其标记为错误?

Tho*_*mas 21

通过写作

int a = 19;
Run Code Online (Sandbox Code Playgroud)

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

试着写

a = 19;
Run Code Online (Sandbox Code Playgroud)

相反,看到出现错误.