C++中使用const关键字来修饰常量,下面从两个方面总结:变量和成员函数。

变量:const可以修饰普通变量、指针(数组)和结构体。

1.const修饰普通变量是最简单的情形。这样的用法多为在程序中创建一个只读变量,类似于C语言的#define宏定义,但const声明的变量可以指定类型,因此在C++中提倡使用const关键字声明只读变量。

 const int Month = ;  /* 示例代码 1 */

示例代码1表示:定义了一个int型变量Month,程序可以使用该变量,但不可对Month变量重新赋值,如:

int tmp = Month + ;    /* 正确 */
Month = ;          /* 错误 */

2.下面是const修饰指针的情形。这样的情形多见于将指针/数组作为某个函数的参数,为了防止调用该函数时无意或错误修改了原指针数据,常在指针参数前添加const关键字,如:

void ShowMsg(const char *strMsg);  /* 示例代码 2 */

示例代码2声明了一个返回值为void的函数ShowMsg,假设该函数的作用是显示某个字符串的内容,我们在使用的时候不希望该函数修改原字符串的内容,因此可以将参数前添加const关键字,这样,如果函数代码中错误出现了修改strMsg字符串的代码,程序编译将会报错。

下面,分四种情况详细叙述const和指针的搭配:

/* 示例代码 3 */
int a = ;
const int *pB = &a;     /* 1 */
int const *pB = &a;       /* 2 */
int * const pB = &a;       /* 3 */
const int * const pB = &a;   /* 4 */

请看示例代码3中的四种情形,我们可以这样来记忆:const位于星号左侧表示指针指向的变量为常值,上述1、2两种情况的作用一样,指针变量指向的值为常值,不可使用指针变量pB来修改该值,换句话说,*pB的值为const不可修改,即不可执行*pB = 11;(但是a = 11是合法的,int b = 11;pB = &b 也是合法的)。注意:可以将const变量的地址赋给const指针(如示例3),但不可将const变量的地址赋给非const指针。如以下代码是非法的:

/* 错误代码示例 */
const int a = ;
int *p = &a;

const位于星号右侧表示是一个常量指针,该指针地址不可被修改。3表示pB只可指向&a地址,但可以使用*pB = 11来改变a的值。4是以上两种情况的综合。

3.使用const修饰函数一般出现在成员函数中,如下形式:

/* 示例代码4 */
class Demo
{
private:
    ......
  public:
    ...
    void ShowMsg() const;  /* 函数声明 */
};

像示例代码4中那样声明的函数称为const成员函数,该函数不会修改类对象,即不会对类的私有成员变量进行改动。

C++中const关键字的使用总结的更多相关文章

  1. (转) C/C++中const关键字详解

    文章转自  http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777416.html 为什么使用const?采用符号常量写出的代码更容易维 ...

  2. C/C++中const关键字的用法及其与宏定义的比较

    1.const关键字的性质 简单来说:const关键字修饰的变量具有常属性. 即它所修饰的变量不能被修改. 2.修饰局部变量 ; ; 这两种写法是等价的,都是表示变量的值不能被改变,需要注意的是,用c ...

  3. C/C++中const关键字的用法及其与宏常量的比较

    1.const关键字的性质 简单来说:const关键字修饰的变量具有常属性. 即它所修饰的变量不能被修改. 2.修饰局部变量 ; ; 这两种写法是等价的,都是表示变量的值不能被改变,需要注意的是,用c ...

  4. C++中const关键字的使用方法,烦透了一遍一遍的搜,总结一下,加深印象!!!

    之前一直在学习C/C++,关于const的使用,这里出现一点,那里出现一点.知识用时方恨少,这一段时间正好各种笔试题,其中关于const的用法也是层出不穷,所以疲于在书本上各种翻,这里汇总一下,加深自 ...

  5. C/C++中const关键字

    http://blog.csdn.net/xdrt81y/article/details/24333335 今天在做一个趋势笔试题的时候,才让我有了系统把const关键字好好总结一下的冲动,因为这个关 ...

  6. C++中const关键字详解

    1.什么是const? const意味着是常量类型,被const修饰的变量或对象是不能被修改和更新的,当然在某些情况下,我们可以偷梁换柱的改变它. 2.为什么要引入const? 最初的目的是为了取代预 ...

  7. C++中const关键字用法

    为什么使用const?采用符号常量写出的代码更容易维护:指针常常是边读边移动,而不是边写边移动:许多函数参数是只读不写的.const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替 ...

  8. C++中const关键字 理解

    const:符号常量  使用符号常量写出的代码更容易维护:指针是边读边移动,而不是边写边移动,许多函数参数是只读不写的. const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替 ...

  9. C++中const关键字用法总结

    看完了c++ primer的基础篇,对const还是有点陌生,在这里小小地总结一下吧. 1) const与变量 在变量的定义前加上 const 修饰符即可完成const对象的创建. const int ...

随机推荐

  1. swift_简单值 | 元祖 | 流程控制 | 字符串 | 集合

    //: Playground - noun: a place where people can play import Cocoa var str = "Hello, playground& ...

  2. MySQL学习记录--分组与聚集

    一.group by 子句 group by 字句可对数据进行分组. 以MySQL5.5的sakila数据库中的film数据表举例:查找出各个电影等级的电影总数 mysql>SELECT rat ...

  3. 我是如何反编译D-Link路由器固件程序并发现它的后门的

    OK,又是周末晚上,没有约会,只有一大瓶Shasta汽水和全是快节奏的音乐…那就研究一下程序吧. 一时兴起,我下载了D-link无线路由器(型号:DIR-100 revA)的固件程序 v1.13.使用 ...

  4. python爬取网易评论

    学习python不久,最近爬的网页都是直接源代码中直接就有的,看到网易新闻的评论时,发现评论时以json格式加载的..... 爬的网页是习大大2015访英的评论页http://comment.news ...

  5. mybatis中crud操作范例

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-/ ...

  6. 51nod 1181 质数中的质数(质数筛法)

    题目链接:51nod 1181 质数中的质数(质数筛法) #include<cstdio> #include<cmath> #include<cstring> #i ...

  7. ASCII编码对照表

    Bin(二进制) Oct(八进制) Dec(十进制) Hex(十六进制) 缩写/字符 解释 0000 0000 0 0 00 NUL(null) 空字符 0000 0001 1 1 01 SOH(st ...

  8. android模块混淆打包时,泛型丢失

    现象:lib模块中写了一个泛型接口,在混淆之后泛型消失,提示"Error:(67, 79) 错误: 类型 ******* 不带有参数" 解决:混淆时把泛型给混淆掉了,在progua ...

  9. N皇后问题-Hdu 2553

      题目描述: 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上. 你的任务是,对于给定的N,求出有多少种合法的放置 ...

  10. Asp.net MVC与Javascript

    特性验证 首先:在web.config文件中<appSettings>节点内添加<add key="ClientValidationEnabled" value= ...