const定义一个常量,常量定义以后就不能被修改。
1 class A {
2 public:
3 int a;
4 int * b;
5 int &c;
6 A(): a(1), b(new int(1)), c(*new int(1)) {}
7 };
8
9
10 int _tmain(int argc, _TCHAR* argv[])
11 {
12 //std::cout << sizeof(A);
13 const A a_obj;
14 //a.a = 1;
15 //a.b = new int(2);
16 a_obj.c = 2;
17
18 *a_obj.b = 2;
19 std::cout << a_obj.c << *a_obj.b;
20 return 0;
21 }
看这份代码,当创建一个const A对象时,A对象范围内的任意一个字节都不可以修改,也就是说,任何内嵌对象(不是通过new出来的)的值都不可以修改,如果在A对象中放的不是内嵌对象那就是放对象的指针,那么对象的指针属于A的一部分,而指针指向的地址的对象和A无关,所以虽然不可以修改地址但可以修改地址指向对象的值。
int a的值内嵌在对象内部其值不可以改,int *b对象的指针在也内嵌在A对象内部,int &c同理;可以修改int b和int c对象的值。
综上:只要确信修改的值,没内嵌在声明为const的对象中,那么改值就可以修改。扩大范围(不局限于const对象),被修饰为const的的那块内存区域,中的任一位都不可以被修改。
write by fgd