我对常数对象有疑问.在以下程序中:
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)
相反,看到出现错误.
| 归档时间: |
|
| 查看次数: |
13403 次 |
| 最近记录: |