c++中const用法相关总结

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

1.const与常量

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

-常量一经定义就不能修改
const int i=5; //定义常量i
i = 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 *p
int i = 1;
int j = 2;
p = &i;

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

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

const int *p;  //等价定义为 int const *p
int 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 *p
int 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
-常量参数与常量成员函数是有区别的,常量参数限制函数对参数的修改,但与数据成员是否被修改无关,而常量成员函数限制的是对类数据成员的修改
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值