C++中const关键字的使用总结
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关键字的使用总结的更多相关文章
- (转) C/C++中const关键字详解
文章转自 http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777416.html 为什么使用const?采用符号常量写出的代码更容易维 ...
- C/C++中const关键字的用法及其与宏定义的比较
1.const关键字的性质 简单来说:const关键字修饰的变量具有常属性. 即它所修饰的变量不能被修改. 2.修饰局部变量 ; ; 这两种写法是等价的,都是表示变量的值不能被改变,需要注意的是,用c ...
- C/C++中const关键字的用法及其与宏常量的比较
1.const关键字的性质 简单来说:const关键字修饰的变量具有常属性. 即它所修饰的变量不能被修改. 2.修饰局部变量 ; ; 这两种写法是等价的,都是表示变量的值不能被改变,需要注意的是,用c ...
- C++中const关键字的使用方法,烦透了一遍一遍的搜,总结一下,加深印象!!!
之前一直在学习C/C++,关于const的使用,这里出现一点,那里出现一点.知识用时方恨少,这一段时间正好各种笔试题,其中关于const的用法也是层出不穷,所以疲于在书本上各种翻,这里汇总一下,加深自 ...
- C/C++中const关键字
http://blog.csdn.net/xdrt81y/article/details/24333335 今天在做一个趋势笔试题的时候,才让我有了系统把const关键字好好总结一下的冲动,因为这个关 ...
- C++中const关键字详解
1.什么是const? const意味着是常量类型,被const修饰的变量或对象是不能被修改和更新的,当然在某些情况下,我们可以偷梁换柱的改变它. 2.为什么要引入const? 最初的目的是为了取代预 ...
- C++中const关键字用法
为什么使用const?采用符号常量写出的代码更容易维护:指针常常是边读边移动,而不是边写边移动:许多函数参数是只读不写的.const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替 ...
- C++中const关键字 理解
const:符号常量 使用符号常量写出的代码更容易维护:指针是边读边移动,而不是边写边移动,许多函数参数是只读不写的. const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替 ...
- C++中const关键字用法总结
看完了c++ primer的基础篇,对const还是有点陌生,在这里小小地总结一下吧. 1) const与变量 在变量的定义前加上 const 修饰符即可完成const对象的创建. const int ...
随机推荐
- Python之路 day2 字符编码及转换
#!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa import sys print("sys default encodin ...
- webbench---linux压测工具
webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好用,安装使用也特别方便,并且非常小. 1.适用系统:Linux-CentOs 2.编译安 ...
- 了解Android的编译器
了解一下Android的编译器并记录下来: Android在4.4以前是使用Dalvik VM的,通过Just In Time(JIT即时编译)来完成编译工作,在Android4.4提供了一种测试版本 ...
- linux上使用shell脚本查看内存使用率
如上的内存利用率 = [-/+buffers/cache:used]/[Mem:total ] = 6293404 / 16333656 对于free命令而言,有如下公式: total = used ...
- 下载历史版本App超详细教程
有些时候我们需要下载旧版本的 App 进行研究或者其他用途,然而在 iOS 下,苹果的 App Store 里面默认只能下载最新版本的 App,对滴,就是这么任性,不服不行.然而在 Android 里 ...
- 189. Rotate Array
Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array ...
- jfinal基本应用 --报主键重复
在使用jfinal 的Model过程中有一个很怪异的问题,发布到服务器上,只要是往表中添加字段,就报主键重复. 1.我添加表的时候调用了 public void create(Map map){ St ...
- guava学习--ratelimiter
RateLimiter类似于JDK的信号量Semphore,他用来限制对资源并发访问的线程数. RateLimiter limiter = RateLimiter.create(4.0); //每秒不 ...
- pandas筛选0,3,6开头的行
http://stackoverflow.com/questions/15325182/how-to-filter-rows-in-pandas-by-regex dbstk.loc[dbstk.ST ...
- js判断qq浏览器
if(navigator.userAgent.toLowerCase().toString().indexOf('qqbrowser') > -1){ console.log('qq');}el ...