c++中const用法相关总结

来源:互联网 发布:淘宝u站在哪里进入 编辑:程序博客网 时间:2024/05/23 16:51

最近也是要考c++了。。。所以把和const有关内容进行一个总结。。。
参考了这篇博文许多http://blog.csdn.net/mysunshinetbg/article/details/48346195
明白了许多,也在这之中添加了const限制函数参数以及常量成员函数两个很简单的内容。。。

1.const与常量

与变量不同,有const修饰的量是常量,常量的值不可改变。

-常量一经定义就不能修改

const int i=5; //定义常量ii = 10;        //错误,修改常量i++;           //错误,修改常量

-const常量必须在定义时初始化

const int n;   //错误,常量n未被初始化

-在常量定义语句中可以出现表达式

int i, k = 9;const int i1 = 10 + k + 6;const int i2 = j + 10;

2.const与指针

-指向常量的指针

指针所指的对象是常量,指针本身是变量

const int *p;  //等价定义为 int const *pint i = 1;int j = 2;p = &i;

p既然指向常量,但是在定义的时候却并没有初始化,而且指向的i是一个变量。
这是因为常量指针自认为指向的对象是常量。

常量指针既可以指向常量,也可以指向变量,常量指针的真正含义在于不能通过p来改变所指向对象的值,并不代表不能通过其他途径来改变对象的值。如:

const int *p;  //等价定义为 int const *pint i = 1;int j = 2;p = &i;int *r = &i;*r = 9; //正确*p = 9; //错误

const int *p;中,指针p本身是一个变量,它可以指向不同的字符串对象,但它指向的对象是一个常量,即*p是一个常量。因此可以修改p中内容,但不能修改 *pc中内容。

const int *p;  //等价定义为 int const *pint i = 1;int j = 2;p = &i;p = &j;

-指针常量

指针p中存放的地址不可改变,p只能初始化,不能改变所指向对象

int i = 1;int j = 2;int * const p = &i;*p = 2; //正确p = &j; //错误

- 指向常量的常量指针

指针是常量,指针所指对象也是常量,上述指针常量和常量指针拥有的修改方法全部没有了。比如:

int i = 1;int j = 2;const int * const p = &i;*p = 2; //错误p = &j; //错误

3.const 与函数

用const限制函数的参数能够保证函数不对参数做任何修改,如:

int f(int i1, const int i2){    i1++;    i2++;    return i1+i2;}

4.const与引用

和const指针一样,const引用可以与常量绑定,也可以与变量绑定,只是不能通过这个const引用来改变绑定对象的值

int a = 10;const int &ra = a;a = 5; //正确ra = 4; //错误

非const引用不能与const对象绑定,因为常量a的值不可改变,但却可以通过非const引用来改变常量a的值,这样做是错误的,如下:

const int a = 10;int &ra = a; //错误,非const引用不能绑定到const对象

引用的类型必须与所引用的对象类型一致,但是有例外情况:在初始化常量引用时可以用任意的表达式作为初始值,只要表达式的结果能转换成引用的类型。

double i = 2.33;const int &r1 = i;//正确

此时上述代码等价与(因为编译器会把其转换成这样来编码)

double i = 2.33;const int temp = i;const int &r1 = temp;

此时i为2.33然而r1为2(因为将其转换成了整型)

5.常量成员函数

在c++中,为了禁止成员函数修改数据成员的值,可以将它设置为常量成员函数。设置常量函数的方法是在函数原型后面加上const,如:

class A{    private:        int i;        int j;    public:        int geti() const;        ... };

-只有类的成员函数才能定义为常量函数,普通函数不能被定义为常量函数,如:

int f(int x) const{    int b = x * x;    return b;}   //错误,普通函数不能为指定为const

-常量参数与常量成员函数是有区别的,常量参数限制函数对参数的修改,但与数据成员是否被修改无关,而常量成员函数限制的是对类数据成员的修改

原创粉丝点击