简体   繁体   中英

const object in c++

I have a question on constant objects. In the following program:

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() is a constant member function of the class const_check , so according to the definition of constants any attempt to change int a should result in an error, but the program works fine for me. I think I am having some confusion here, can anybody tell me why the compiler is not flagging it as an error?

By writing

int a = 19;

inside print() , you are declaring a new local variable a . This has nothing to do with the int a that you declared inside the class const_check . The member variable is said to be shadowed by the local variable. And it's perfectly okay to declare local variables in a const function and modify them; the const ness only applies to the fields of the object.

Try writing

a = 19;

instead, and see an error appear.

你是不是改变实例变量a你正在创建一个局部变量a中的每个方法。

You're not changing the member variable a in either print() or print2(). You're declaring a new local variable a which shadows the member variable a.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM