详解C++中const使用方法

2023年 7月 26日 发表评论
腾讯云正在大促:点击直达 阿里云超级红包:点击领取
免费/便宜/高性价比服务器汇总入口(已更新):点击这里了解

详解C++中const使用方法

const 是 constant 的缩写,本意是不变的,不易改变的意思。在 C++ 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。

一、符号常量的声明

常量声明的语句的形式:  const + 数据类型说明符 + 常量名 = 常量值

数据类型说明符 + const + 常量名 = 常量值

注意:   符号常量在声明时一定要赋初值,且在程序中不能改变其值。

const float PI = 3.14159;                   //下面则是错误的声明                   const float PI;                    PI = 3.14159;

二、const* 和 *const 的区分

目前了解的形式

例如:

 const int *p (int const *p)            int *const p            const int* const p  

1.const int *p (int const *p) 的意义

二者表达的意思一致,即 *p 是个 const ,不能通过 *p 修改 p 的指向,所以也可以叫它为只读型指针

由于是将指向的数据视为常量,定义的时候可以不用初始化

1.   int a = 0;             const int* p;             p = &a;             *p = 2; //错误,不能通过*p 修改值        2.   int a = 0;                 const int* p = &a;                 a = 1;                 cout

2. int* const p 的意义

该定义将 p 视为一个const常量,所以定义时就要初始化,且p 指向的位置不能改变,所以也可以叫它指针常量

1.  int a = 0,b =1;     int* const p = &a;     p = &b;    //错误,p 的指向已不能改变  2.  int a = 0, b = 1;     int* const p = &a;     *p = b;     cout 

(const int* p 与 int* const p 与 const int* const p 的区别)

const int* p 表示把 p 指向的变量看成常量

int* const p 表示把 p 自己定义为常量,所以定义时就要初始化

const int* const p 表示 p、*p 都是常量,即 p 的指向不能改变,也不能通过 *p 改变 p 指向的值

有个评论讲的很有意思,share一下:

看”effective c++”第三条讲到: 只需要判断const是在 * 的左边还是右边即可。 左边则是修饰被指物,即被指物是常量,不可以修改它的值; 右边则是修饰指针,即指针是常量,不可以修改它的指向; 在左右两边,则被指物和指针都是常量,都不可以修改。

int c = 3;  int a = 2;  int b = 1;  //const出现在*左边,则被指物是常量  const int * pi = &a;  *pi = b;//不正确 被指物是常量  pi = &c; //正确  //const 出现在* 右边,则指针是常量  int * const p = &a;  p = &c;//不正确,指针是常量  *p = c;//正确  //const出现在*左右两边,则被指物和指针都是常量  const int * const ptr = &a;  ptr = &c;//不正确,指针是常量  *ptr = c;//不正确,被指物是常量  

注意事项 !

1.如果有const int a = 0; 那么必须是 const int* 才能指向 a,像 int* p =&a; 是非法的    2.const int a =10;     int* p =&a; // 错误,这是不能取地址的,否则有修改值的能力  

本文来源:www.lxlinux.net/7922.html,若引用不当,请联系修改。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: