const修饰问题

来源:互联网 发布:通用数据库管理系统 编辑:程序博客网 时间:2024/06/05 03:36

const修饰指针的四种情况:

int b = 500;const int* a = &b;  // 情况1int const *a = &b; // 情况2int* const a = &b; //情况3const int* const a = &b; // 情况4

1.对于情况1,const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向的为常量;如果const位于星号的右侧,则const修饰的是指针本身,即指针本身是常量。因此情况1而情况2是相同的。都是指针指向的内容为常量,这种情况下不允许对内容进行更改。
2.情况2与情况1相同
3.情况3为指针本身是常量,这种情况下不能对指针本身进行更改,而指针指向的内容是可以更改的。也即指针指向固定的内存位置,而这个位置具体存储什么值是可变的。这种情况下,指针在定义的时候就必须初始化(原因显而易见,定义之后指针的值就不能再改变,因此不能再对指针本身进行赋值操作了)
4.情况4为指针本身和指向的内容均为常量。表明指针本身的值和指向内容的值都不能更改。

const修饰成员函数的情况:
用const放在成员函数的括号之后,用来表明该成员函数不会对任何类的成员变量进行修改,原则上说任何不对成员变量进行修改的成员函数都应该声明称const,这样有助于提高代码的可读性和可靠性。

const放在函数声明之前表明该函数的返回值时常量。

在c++中const还可以用来定义常量,const定义常量对比#define的有点在于const有数据类型,编译器会对const定义的常量做类型检查。另外,有些调试工具可以对const常量进行调试而不会对宏常量进行调试。

0 0