C++中const用法总结
2016-03-26 11:36
288 查看
1修饰变量/指针
注意以下几种修饰的区别:(1)const int * a;
(2)int const *a;
(3)int * const b;
(4)int const* const c;
其中前两种指a是一个指向const int变量的指针;(3)b是一个const型的指向int变量的指针;(4)c是一个const型的指向const int变量的指针。
2修饰函数形参变量/指针/引用
如void fun(const a,const* b,const& c)
指形参a和b、c在函数fun内是不可以被改变的。
其实对变量a来说,const对它没有任何意义,因为a作为形参,本来就是实参的一个复制品,它的改变与否与实参没有任何影响。更常用的是修饰指针或变量,这样会使得函数的使用者无法改变实际指向/引用的变量,保证了安全性。
3修饰函数返回值
如const int fun1()
const int* fun2()
const int& fun3()
这种用得不是很多,作用类似于修饰变量,返回一个const型的变量
4修饰类对象/指针/引用
如const classA a;
const classB* b;
const classC& c;
(1)不能改变对象的任何成员变量
(2)不能调用任何非const成员函数
5修饰类成员变量
(1)不能被修改(2)只能在类初始化列表中被赋值
小总结:只能在类初始化列表中被赋值的情况:
(1)const成员变量
(2)引用变量
(3)基类构造函数
6修饰类成员函数
如void fun() const;
(1)不能修改类的任何非静态数据成员(可以修改静态数据成员);
(2)不能调用类的任何非const函数(可以调用const成员函数)。
const常量与define宏定义的区别
(1) 编译器处理方式不同define宏是在预编译阶段展开。
const常量是编译运行阶段使用。
(2) 类型和安全检查不同
define宏没有类型,不做任何类型检查,仅仅是展开。
const常量有具体的类型,在编译阶段会执行类型检查。
(3) 存储方式不同
define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。
const常量会在内存中分配(可以是堆中也可以是栈中)。
相关文章推荐
- 由find_char()函数所想到的
- c语言:双向循环链表的实现
- 在C++中使用sizeof
- C语言结构体变量字节对齐问题总结
- 计蒜客|C++程序设计|判断质数
- 线索二叉树的原理以及创建和遍历(c++)
- 设计模式--建造者模式C++实现
- 计蒜客|C++程序设计|简单斐波那契
- C++之:类对象内存对齐
- 学习 C++能带给我们什么
- C&&C++ 经典书籍
- C++精进篇(十)之―封装、继承、多态
- c语言函数指针
- C++精进篇(九)之―继承及经典示例
- C++第二次作业
- C++精进篇(八)之―函数重定义、重载、重写
- C++精进篇(七)之―操作符重载
- C++精进篇(六)之― Vector、iterator、Array
- 5-36 复数四则运算 c语言
- 学习C++不是一件容易的事情