注意事项:
- 常成员函数的定义和声明都要含有const关键字
- 一个函数是否含有const关键字可以作为重载函数,const对象默认调用const函数,非const对象默认调用非const函数,如果没有非const函数 , 也可以调用const函数
- const函数中不能更新目的对象的任何成员(mutable修饰的变量除外,这里不展开阐述),以此方法来保证const对象不被修改
- 如果const成员函数想修改成员变量值,可以用mutable修饰目标成员变量
必须在构造函数中使用初始化列表的方式赋初值
,因为const修饰的对象必须初始化 。举个例子,刚才的类如果a, b为常数据成员,则应该改写为如下形式:class Example{public: Example(int x, int y):a(x),b(y){} //初始化列表方式赋初值 void print(); void print() const;private: const int a,b;};void Example::print() {cout<<"print():"<<a<<ends<<b<<endl;}void Example::print() const {cout<<"print() const:"<<a<<ends<<b<<endl;}如果为静态常数据成员,由于不属于具体对象,所以不能在构造函数里赋值,仍然应该在类外赋值 。特别地,如果静态常量为整数或枚举类型 , C++允许在类内定义时指定常量值 。比如以下两种方式均合法:
class Example{public: Example(int x, int y):a(x),b(y){} void print(); void print() const;private: const int a,b; static const int c = 10; //静态常量};class Example{public: Example(int x, int y):a(x),b(y){} void print(); void print() const;private: const int a,b; static const int c; //静态常量};const int Example::c = 10;const修饰类对象用const修饰的类对象,该对象内的任何成员变量都不能被修改 。因此不能调用该对象的任何非const成员函数,因为对非const成员函数的调用会有修改成员变量的企图 。
class A{ public: void funcA() {} void funcB() const {}};int main{ const A a; a.funcB(); // 可以 a.funcA(); // 错误 const A* b = new A(); b->funcB(); // 可以 b->funcA(); // 错误}const与宏定义的区别(1) 编译器处理方式不同define宏是在预处理阶段展开 。const常量是编译运行阶段使用 。
(2) 类型和安全检查不同define宏没有类型 , 不做任何类型检查,仅仅是展开 。const常量有具体的类型,在编译阶段会执行类型检查 。
(3) 存储方式不同define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存 。const常量会在内存中分配(可以是堆中也可以是栈中) 。
(4)作用范围不同
const有作用域,而define不重视作用域,默认定义处到文件结束,如果定义在指定作用域下有效的常量,那么define不能用 。
(5)const 可以节省空间,避免不必要的内存分配 。例如:
#define PI 3.14159 //常量宏 const doulbe Pi=3.14159; //此时并未将Pi放入ROM中 ...... double i=Pi; //此时为Pi分配内存,以后不再分配! double I=PI; //编译期间进行宏替换,分配内存 double j=Pi; //没有内存分配 double J=PI; //再进行宏替换,又一次分配内存!const定义常量从汇编的角度来看 , 只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而 #define定义的常量在内存中有若干个拷贝 。
const与static的区别static
1、static局部变量 将一个变量声明为函数的局部变量 , 那么这个局部变量在函数执行完成之后不会被释放,而是继续保留在内存中
推荐阅读
- 手机怎么把QQ空间说说一次性全删掉(qq如何恢复删掉的说说)
- 怎么一次性删掉QQ空间里的全部说说(翻看以前qq空间的说说)
- 怎么把空间说说全部清空(qq空间一键清空所有说说)
- 手机QQ空间怎么一次性删除说说求解(怎么一键删除qq说说)
- qq空间说说怎么全部删除(怎样一键清空qq空间)
- 如何注销空间 1980717Z空间
- qq空间说说怎么全部删除(qq空间说说一键恢复)
- QQ空间说说太多怎么一次性全删除(说说可以一键删除吗)
- 手机QQ空间怎么一次性删除说说求解(一键删除qq说说)
- 用电脑扣扣空间说说怎么批量删除(怎么批量删除自己qq空间说说)