#include<iostream> #include<stdlib.h> using namespace std; int main() { int a = 3; //整型变量(定义时不一定要赋初值) const int b = 4; //整型常量(定义时必须要赋初值,否则报错) int b1 = b;//常量仍拥有赋值的功能,可以给变量赋值(无任何风险)
//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可以被赋值和修改,即指向别的量//int * b2 = &b;//报错,因为右边的b是整型常量,左边b2却是指向整型变量,那势必会有通过*b2(int型变量)修改b(int常量)的风险
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只是对它真正修饰的量有作用,说明该量不可修改,谁给该量赋初值其实无所谓,只要没有风险,都可以。*///*p = 0;//常量*p不能被修改,报错
对于const的理解,其本质:真正被const修饰的量是无法被修改的量(常量)。所以:
1.对于“真正”的理解:要看清const真正修饰的是谁,一个真正被const修饰的量即为常量,不可被改变。反例比如const int *p,这个const真正修饰的是int,是p指向的那個int型的量*p,所以*p是常量,无法被改变;而p其实没有被const修饰,所以p仍是一个变量,指针变量,p可以被改变。
2.在定义一个真正被const修饰的量(常量)时,必须要给它赋初值(包括类的常数据成员,在调用构造函数时,必须给常成员用初始化列表方式赋初值),之后再也不能改变它的值;但常量的其它功能不会丧失 (比如可以拿常量给别的量赋值等等)
3.其实判断赋值是否合法,就是看风险:如果常量有被修改的风险,那么这个赋值肯定不合法,会报错,如果没风险,那就是合法的,可以赋值。比如上面的:
b这个常量就有被b3修改的风险。int &b3 = b;
c++初级 之 const与常量
最新推荐文章于 2023-02-15 21:15:32 发布