c++初级 之 const与常量

来源:互联网 发布:java代码大全 下载 编辑:程序博客网 时间:2024/06/06 02:01
#include<iostream>#include<stdlib.h>using namespace std;int main(){int a = 3; //整型变量(定义时不一定要赋初值)const int b = 4; //整型常量(定义时必须要赋初值,否则报错)int b1 = b;//常量仍拥有赋值的功能,可以给变量赋值(无任何风险)
//int * b2 = &b;//报错,因为右边的b是整型常量,左边b2却是指向整型变量,那势必会有通过*b2(int型变量)修改b(int常量)的风险
//int &b3 = b;//报错,因为b是整常,b3却是整变的别名(引用),那势必会有通过b3(int型变量的引用)修改b(int常量)的风险int const c = a; //int const与const int等价,而且可以由变量a向常量c赋值功能(无任何风险)int const * p; //const在*之前,则const修饰的实际上是int,表示p指向的量*p是int型常量(const int)不能被修改。而p其实没有被const修饰,仍是变量,所以不是必须赋初值p = &a; //变量p可以被赋值和修改,即指向别的量
        //*p = 0;//常量*p不能被修改,报错
  a = 0; //a仍可以修改int const *const p2 = &a; //const在*之后,则后面这个const实际修饰的就是p2了,表示p2是常量,不能被修改//p2 = &b;//报错int const* p3 = &b;//无风险const int * const p4 = &c;//无风险const int &d = a;//d是a的引用(别名)常量,被const修饰,b不可被改变(无风险)//d = 3;//报错a = 80;//但a仍可以改变return 0;}/*const只是对它真正修饰的量有作用,说明该量不可修改,谁给该量赋初值其实无所谓,只要没有风险,都可以。*/

对于const的理解,其本质:真正被const修饰的量是无法被修改的量(常量)。所以:

1.对于“真正”的理解:要看清const真正修饰的是谁,一个真正被const修饰的量即为常量,不可被改变。反例比如const int *p,这个const真正修饰的是int,是p指向的那個int型的量*p,所以*p是常量,无法被改变;而p其实没有被const修饰,所以p仍是一个变量,指针变量,p可以被改变。

2.在定义一个真正被const修饰的量(常量)时,必须要给它赋初值(包括类的常数据成员,在调用构造函数时,必须给常成员用初始化列表方式赋初值),之后再也不能改变它的值;但常量的其它功能不会丧失 (比如可以拿常量给别的量赋值等等)

3.其实判断赋值是否合法,就是看风险:如果常量有被修改的风险,那么这个赋值肯定不合法,会报错,如果没风险,那就是合法的,可以赋值。比如上面的:

int &b3 = b;
b这个常量就有被b3修改的风险。


原创粉丝点击