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 mai开发者_StackOverflown(){
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.
You aren't changing the instance variable a
you are creating a local variable a
in each method.
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.
Also, unless I am mistaken, you forgot to actually declare the member variable const to begin with.
精彩评论