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.