C++ 中 const
来源:互联网 发布:服务器编程书籍 编辑:程序博客网 时间:2024/05/16 08:04
一:定义常量
const关键字指定变量的值是恒定的,以防止程序员修改它,并且在定义一个const变量时必须初始化它,除非你用了extern关键词准备来进行外部链接。
const int i = 5; //right,和 int const i=5; 等价 const int j; //error,未初始化extern const int k; //right,外部链接
二:指针使用const
2.1 指向常量int的指针
int x = 1;const int* p1 = &x;int const* p2; //两种写法表示的都是一个意思*p1 = 10; //error,你不可以通过指针p1改变x值
注意,const在这里可以不为其初始化。
2.2 指向变量int的常量指针
int x = 1;int * const p1 = &x; //right*p1 = 3; //right,与2.1不同,你可以通过指针p1修改x值int * const p2; //error,与2.1不同,必须初始化int y = 2;p1 = &y; //error,你不可以让p1指向别的地方
2.3 const指针与普通指针的区别
int x = 1;const int * con_p = &x;int * p = con_p; //error
我们很容易知道第三句代码是错的。也就是不可以把指向常量的指针赋给一个普通的指针,这是为了防止普通指针修改该常量。
那下面的代码呢?
int x = 1;int * const con_p = &x;int * p = con_p; //right
这句代码是对的。把指向变量的常量指针赋给一个普通指针,注意赋值的是x的地址,这无关常量指针的事,要注意区分。
2.4 总结
请注意,const是一个左结合的类型修饰符,根据这个特点可以很容易总结如下:
const int * p
,指向常量int的指针,即int是常量,指针是变量;
int * const p
,指向变量int的常量指针,即int是变量,指针是常量。
三:const修饰的函数
const int fun1() //这个其实无意义,因为参数返回本身就是赋值;const int * fun2() //调用时 const int * pValue = fun2(); int * const fun3() //调用时 int * const pValue = fun2();
四:类中使用const
4.1 类成员变量
表示类成员常量,不能被修改,且它只能在初始化列表中赋值。
class Base { private: const int data; //类成员常量public: Base(int x):data(x){} //列表初始化}
为什么只能在初始化列表中赋值?假如写出了下面的代码:
class Base { private: const int size = 10; //error int a[data];public: Base(int x):data(x){} //列表初始化}
const变量属于对象,而不是类,在对象未被定义前,size不存在,那么a就不存在,为了避免这种写法,故要求const变量只能在初始化列表中赋值。
4.2 类成员函数
const修饰类的成员函数,则该成员函数不能修改类成员变量和调用类中任何非const成员函数。一般写在函数的最后来修饰。
class Base { private: int data; public: Base(int x):data(x){} void func1() { ; } void func2()const { data = 1; //error } void func3()const { func1(); //error } }
1 0
- C中Const小结
- c中const
- object-c 中const !
- C中const用法
- C中const
- C中指针const
- C中const关键字
- C语言中const
- C中const关键字
- c,c++中const
- C++中const详解
- C中CONST的使用
- C/C++中const详解
- C/C++中const详解
- C中CONST的使用
- C中CONST的使用
- C中CONST的使用
- C语言中const初探
- POJ 3435 Sudoku Checker 可能会
- HBase最佳实践 – 多租户机制
- 蓝桥杯 算法提高 矩阵相乘
- CodeForces 404A Valera and X【水题】
- GDKOI2017酱油记
- C++ 中 const
- springmvc图片上传(夹杂普通字段一次性处理)
- 在Ubuntu上运行helloworld.c
- 前端拖拽效果
- MySQL中的时间比较日期转换函数
- Java虚拟机运行时内存区域
- 归并排序
- Linux学习之——常用文件处理命令
- static关键字详讲