博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ const
阅读量:5167 次
发布时间:2019-06-13

本文共 2305 字,大约阅读时间需要 7 分钟。

const是一个C++语言的限定符,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。

1. 修饰常量

用const修饰的变量是不可变的,(错误演示):

使用 const 修饰变量 x ,使得变量 x 变成常量,此时再修改 x 的值就会出错,禁止修改。

#include
#include
using namespace std;int main(void){ const int x = 3; // int const x = 3,和前一种是等价的 x = 5; // 此时x是一个整型常量,不可修改,编译出错。 system("pause"); return 0;}

2. 修饰指针

如果const位于 * 的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;

如果const位于 * 的右侧,const就是修饰指针本身,即指针本身是常量。
因此,推荐使用int const* p,而不是使用const int* p(虽然两者意义完全一样),这样更容易理解。

用 const 修饰指针变量 *p ,这样 *p 就变成常量,此时修改 *p 的值就会出错,但是修改 x 的值不会出错,

#include
#include
using namespace std;int main(void){ int x = 3; int const *p = &x; // const int *p 两者等价 *p = 5; // 编译报错 system("pause"); return 0;}

因为 const 修改的是指针变量 *p ,而不是地址,所以 p 是可以修改的,但是修改的时候要赋地址,不能赋1,2,3这样的数值。

#include
#include
using namespace std;int main(void){ int x = 3; int y = 5; int *q = &y; int const *p = &x; // const int *p 两者等价 // *p = 5; // 编译报错 p = &y; // 把y的地址赋给p ,p 指向 y ,*p = 5 cout << "*p = " << *p <

运行结果:

如果const位于 * 的右侧,const就是修饰指针本身,即指针本身是常量。

int *const p 此时 const 修饰的是 “指针p” ,p 是一个地址,也就是说这个地址是一个常量,

*p = 10 这里修改的是 指针变量 *p ,而不是 指针 p ,所以不会报错,修改之后 x 的值也会随之发生变化。

p = &y 而这里修改的是 指针 p ,也就是说修改了地址,而地址是常量,不能修改,所以会出错。

#include
#include
using namespace std;int main(void){ int x = 3; int y = 5; int *const p = &x; *p = 10; // 编译通过 p = &y; // 编译报错 system("pause"); return 0;}

3. 修饰引用

&z = x :z 是 x 的别名,const将 别名 z 变成常量,此时给 z 赋值就会出错,但是给 x 重新赋值是可以的

#include
#include
using namespace std;int main(void){ int x = 3; int y = 5; int const &z = x; z = 10; // 编译错误 system("pause"); return 0;}

4. 修饰函数参数

用const修饰函数参数,传递过来的参数在函数内不可以改变。

用const修饰函数参数的主要作用就是使不想被修改的函数参数变成常量,在函数里不能随便修改函数参数。

#include
#include
using namespace std;void fun (const int &a,const int &b);int main(void){ int x = 3; int y = 5; fun(x,y); cout << x << "," << y << endl; system("pause"); return 0;}void fun (const int &a,const int &b){ a = 10; // 编译出错 b = 20; // 编译出错}

 

 

 

转载于:https://www.cnblogs.com/chuijingjing/p/9018924.html

你可能感兴趣的文章
Ajax教程(转载)
查看>>
笔记:深入理解JVM 第5章 调优案例分析与实战
查看>>
笔记:常用排序算法
查看>>
Servlet+JSP 对外访问路径配置
查看>>
2007年6月份最新《The Architecture Journal》内容摘要翻译
查看>>
hdu 5233 Gunner II (stl vector map)
查看>>
C语言退出多层嵌套循环技巧
查看>>
【Docker】常用命令
查看>>
spring整合struts2
查看>>
三种预处理器px2rem
查看>>
Metrics.NET step by step
查看>>
[Hadoop]如何安装Hadoop
查看>>
[luogu1328]生活大爆炸版石头剪刀布
查看>>
XUtils3框架的初始体验(一)
查看>>
解决Java POI 导出Excel时文件名中文乱码,兼容浏览器
查看>>
基础知识
查看>>
DB2问题
查看>>
Java中静态方法和非静态方法的调用
查看>>
单个脚本实现扫雷
查看>>
<canvas>drawImage()方法无法显示图片
查看>>