C++中const关键字的使用总结

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

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

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

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

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

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

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

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

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

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

/* 示例代码 3 */
int a = 10;
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 = 10;
int *p = &a;

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

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

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

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

时间: 2024-12-14 20:02:04

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

c++中const关键字全面总结

一.const作用 1.const定义常量 注意:const只对它左边的东西起作用,唯一的例外就是const本身就是最左边的修饰符,那么它才会对右边的东西起作用. (1)const修饰变量,以下两种定义形式在本质上是一样的.它的含义是:const修饰的类型为TYPE的变量value是不可变的. TYPE const ValueName = value; const TYPE ValueName = value; (2)将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行初

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

文章转自  http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777416.html 为什么使用const?采用符号常量写出的代码更容易维护:指针常常是边读边移动,而不是边写边移动:许多函数参数是只读不写的.const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下: 常变量:  const 类型说明符 变量名 常引用:  const 类型说明符 &引用名 常对象:  类名 const 对象名 常成员函

【转载】C/C++中const关键字详解

转自http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777441.html 为什么使用const?采用符号常量写出的代码更容易维护:指针常常是边读边移动,而不是边写边移动:许多函数参数是只读不写的.const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下: 常变量:  const 类型说明符 变量名 常引用:  const 类型说明符 &引用名 常对象:  类名 const 对象名 常成员函数:  

C/C++中const关键字详解

转自http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777416.html 为什么使用const?采用符号常量写出的代码更容易维护:指针常常是边读边移动,而不是边写边移动:许多函数参数是只读不写的.const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下: 常变量:  const 类型说明符 变量名 常引用:  const 类型说明符 &引用名 常对象:  类名 const 对象名 常成员函数: 

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

1.const关键字的性质 简单来说:const关键字修饰的变量具有常属性. 即它所修饰的变量不能被修改. 2.修饰局部变量 1 const int a = 10; 2 int const b = 20; 这两种写法是等价的,都是表示变量的值不能被改变,需要注意的是,用const修饰变量时,一定要给变量初始化,否则之后就不能再进行赋值了,而且编译器也不允许不赋初值的写法: 在C++中不赋初值的表达一写出来,编译器即报错,且编译不通过. 在C中不赋初值的表达写出来时不报错,编译时只有警告,编译可以

C++中const关键字详解

1.什么是const? const意味着是常量类型,被const修饰的变量或对象是不能被修改和更新的,当然在某些情况下,我们可以偷梁换柱的改变它. 2.为什么要引入const? 最初的目的是为了取代预编译指令:define  MAX  (1024)  ,显然这样的宏定义常量是C语言中继承而来的,C++意识到这种宏替换会存在边际效应,因此希望const能替代它 3.const有什么作用? (1)可以定义const常量,具有不可变性. 例如: const int Max=100; int Array

C++中const关键字用法

为什么使用const?采用符号常量写出的代码更容易维护:指针常常是边读边移动,而不是边写边移动:许多函数参数是只读不写的.const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下: 常变量:  const 类型说明符 变量名 常引用:  const 类型说明符 &引用名 常对象:  类名 const 对象名 常成员函数:  类名::fun(形参) const 常数组:  类型说明符 const 数组名[大小] 常指针:  const 类型说明符* 指针名 ,类型

ES6中 const 关键字

const声明一个只读的常量.一旦声明,常量的值就不能改变. 定义后可以使用但不能修改 但是,const 定义的对象可能与我们想象的不太一样 定义了对象b ,我们可以在b上添加修改属性,再看一个列子 现在又不让修改了 如果想让对象变成不可变数据,可以使用Object.freeze 方法 原文地址:https://www.cnblogs.com/zhangtao1990/p/8283330.html

C++中const 的各种用法

C++中const 关键字的用法 const修饰变量 const 主要用于把一个对象转换成一个常量,例如: const int size = 512; size = 0; // error: assignment of read-only variable 上面的例子中,定义size为常量并初始化为512,变量size仍是一个左值,但是现在这个左值是不可修改的,任何修改size的尝试都会导致编译错误. 因为常量在定以后就不能被修改,因此const对象定义时必须初始化,否则会引起编译错误,例如: