C++ Const详解
一、const限定符
1、const限定对象必须初始化
const int i = 100; //正确:编译时初始化
const int j; //错误:j是一个未初始化的常量
2、const限定的值不可以改变
cosnt int i = 100;
i = 5; //错误:试图向const修饰对象写值
const类型对象能完成非const类型所能参与的大部分操作,主要是限制是
只能在const的对象上执行不改变其内容的操作。
例:
int i = 100;
const int ci = i; //正确:i的值拷贝给ci
int j = ci; //正确:ci的值呗拷贝给j
///<原因:拷贝一个对象并不会改变它的内容。
3、cosnt对象仅在文件中有效
如果程序包含多个文件,定义同名全局变量不加const,
由于全局变量是外部链接所以会重复定义。
//a.h
int i = 1024;
//b.h
int i = 512;
//c.h
int i = 2048;
///<编译失败,重复定义
对全局变量加上const限定符,限制变量的作用域为文件内(内部链接)。
所以不会重复定义
//a.h
const int ci = 1024; //正确
//b.h
const int ci = 512; //正确
//c.h
const int ci = 2048; //正确
///<编译正确
- 如果想只需要定义一次,在多个文件之间共享这个const对象
- 那么对于cosnt变量不管是声明还是定义都添加extern关键字。
//a.h
extern const int ci = 1024;
//b.h
extern const int ci; //与a.h中定义的ci是同一个,值为1024
//c.h
extern const int ci; //与a.h中定义的ci是同一个,值为1024
///< a.h的常量用extern限定使其被其他文件使用
///< b.h, c.h的extern指明ci并非文件独有,它的定义在别处出现
二、const的引用
1、对常量的引用
简称“常量引用”是 “对常量的引用”。
严格来说并不存在常量引用。因为引用不是一个对象。
const int ci = 1024;
const int &cri = ci;
2、对常量的引用初始化
引用类型必须与所引用对象的类型一致。但有两个例外:
第一种就是在初始化话常量引用时允许用任意表达式作为初始,只要改表达式的结果能转成引用类型即可。
第二种基类的引用绑定到派生类对象上(本文不解释)
int i = 10;
const int &cri1 = i; // 允许将const int&绑定到一个普通的int对象上
const int &cri2 = 42; //正确:绑定一个临时量对象
const int &cri3 = cri1 * 2; //正确:绑定一个临时量对象
int &ri4 = cri1 * 2; //错误:ri4是一个普通的非常量引用
double d = 3.14;
const int & cri4 = d; //正确:绑定一个临时量对象
常量引用之所以可以这样初始化,它绑定的是一个临时量的对象
以最后一个为例,编译器把上述代码变成下面的形式:
double d = 3.14;
const int temp = d; //由双精度浮点数生成一个临时的整型常量
const int &cri4 = temp; //
本文详细探讨了C++中的const关键字,包括const限定符的特性,如必须初始化且值不可改变,以及const对象的作用域。此外,还讲解了const引用、指针与const的关系,特别是指针到const和const指针的区别。文章进一步阐述了顶层const和底层const的概念,以及const在函数参数中的应用,尤其是const形参的重复定义问题。同时,介绍了const成员函数在类中的作用,模板类型左值引用参数的推断,以及constexpr和常量表达式的重要性。最后,讨论了const_cast在消除对象的const属性中的应用。
最低0.47元/天 解锁文章
302

被折叠的 条评论
为什么被折叠?



