const与指针、成员函数、#define
来源:互联网 发布:类似于柏拉图软件 编辑:程序博客网 时间:2024/06/03 19:51
const与指针
我们知道被const修饰的变量表示常量,如const int a = 100; 表示a是一个值为100的常量,且不可改变。那么const修饰指针呢?
注意:
const为常量赋值时,必须初始化
const修饰指针的情况分为4种:
int b = 500;const int* a = &b; // (1)int const *a = &b; // (2)int* const a = &b; // (3)const int* const a = &b; // (4)
如果 const 在 * 左侧,表示 const 修饰的是指针指向的变量
如果 const 在 * 右侧,表示 const 修饰的是指针
左变量,右指针
因此(1),(2)相同,都表示指针指向的变量是常量,钥匙可以变,但是通过该钥匙打开的仓库内的东西不能变(注意,通过其他钥匙是可以改变仓库内容的)。因此通过该指针指向的变量是不能改变的,即(*a)的内容不能变:
int b = 500;const int* a = &b;*a = 600; // 错误b = 600; // 通过b改变而非*a改变,正确,此时*a也是600a = &c; // 正确,可以让a指向另一个地址
情况(3) int* const a = &b; 表示指针本身是常量,但指针的内容可以改变。就是说钥匙不能变(只能指向该仓库),但是仓库内的东西可以变(a++错误,*a = 600正确)。对于情况3,定时的同时必须初始化。
int* const a; // 错误,定义时没有初始化int* const a = &b; //正确*a = 600; // 正确,可以修改内容a++; // 错误
情况(4) const int* const a = &b; 表示指针指向的内容和指针都是常量,即钥匙和仓库内容都不能变。
const与成员函数
有一些成员函数,不改变类的数据成员,也就是说不改变别人,那么可以把这样的成员函数定义为const。如:
void Student::print() { cout<<"this is student print method"<<endl;}
为了使成员函数的意义更加清楚,可以在不改变他人的函数上,加上const修饰。
class Student { ... void print() const; ...};// 在类外,也必须也定义成constvoid Student::print() const { cout<<"this is student print method"<<endl; }
如果 被const修饰的函数,试图改变他人,则编译报错,你都是const修饰的函数了,还想改变别的数据成员,休想!!
const与#define
const与#define都能定义常量,但是const更好。
首先,const可以定义类型,比如我们可以写 const int a = 100; 但是#define就不能。
其次,编译器可以对const进行安全检查,而对#define只进行简单替换,没有类型的安全检查,可能存在隐藏的错误。
因此,推荐使用const。
- const与指针、成员函数、#define
- C++笔记(一)const与define,指针,引用,函数,类成员
- C++ this指针与const成员函数
- C++ 引用和指针 const与#define #define与内联函数
- C++学习笔记(2):指针与const成员函数
- this指针?const函数?const对象成员?
- 4-16-指针、函数与指针、游戏外挂、define与typedef、const
- 面试宝典第6章_ 2(const) const 成员函数 ,const 与define定义的不同
- 【C++总结】函数形参,返回const对象与非const对象,成员函数,函数指针
- 指针数组,指针指向const成员函数
- const成员函数与static成员函数
- c++ const 与成员函数
- const与类成员函数
- const成员函数与const对象
- const对象与const成员函数
- const成员函数与const对象
- this指针及const成员函数
- 类 this指针 const成员函数
- 状态栏1---状态栏响应滚动事件
- linux下gzip,bzip2,tar,zip,rar压缩与解压缩命令总结
- Springboot整合mybatis出现无法注入mapper接口的问题处理
- Retrofit(一)、Retrofit+OkHttp实现简单的Get与Post请求
- 3442: 学习小组
- const与指针、成员函数、#define
- stm32 延时 delay us ms
- C++的指针
- 安卓c++虚函数解密
- js如何获取json数组的长度
- Python核心基础:之二:基础语法
- 9、Oracle: ROWNUM用法和分页查询总结
- c++多态
- HTML发展历史