- const可以在运行时初始化,也可以在编译时初始化。
-
- cosnt int i = get_size() //运行时初始化
- const int i = 4 //编译时初始化,编译器会在用到i的地方进行替换
- 默认情况下,const只在文件内有效。如果确实需要在文件间共享,可以使用extern关键字(不管是定义或者声明都需要添加)。
- const作用到引用上,则该引用不能修改被引用的值。
- 初始化对const的引用:
-
- int i = 42;
- cosnt int &r1 = i; //允许将const int &绑定到到普通int上
- int &r2 = 42; //错误!引用的类型必须与其所引用的对象类严格匹配。引用必须绑定到对象上!!!
- const int &r3 = 42 //正确!const引用可以绑定到字面量!
-
- 在常量引用绑定到另外一个类型时发生了什么:
-
- double dval = 3.14;
- cosnt int &r1 = dval;
- 编译器会将上述代码变成如下形式(为了确保类型一致):
-
- cosnt int tmp = dval;
- cosnt int &r1 = tmp;
- 我们设想如果没有const时,若是将引用绑定到一个临时变量上,比如一个字面量42上,想要改变引用的值得时候,就没有意义了,c++将这种绑定视为非法。
- 指向常量的指针(仅仅要求不能通过指针改变所指向对象的值,并不要求对象本身是const的):
-
- const double pi = 3.14;
- const double *ptr = π
- double dval = 3.14;
- cosnt double *ptr1 = &dval; //正确,允许一个指向常量的指针指向非常量对象。
- 常量指针(必须初始化,一旦初始化完成,存放在指针中的地址就不能改变了):
-
- int errn = 0;
- int * const pt = &errn;
- cosnt double pi = 3.14;
- cosnt double *const pip = π //指向常量对象的常量指针
- 顶层const:指针本身是个常量。
- 底层const:指针所指对象是个常量。
有关const的一些知识点
最新推荐文章于 2021-12-21 00:26:48 发布