1.基本概念
const符定义的是什么,举个栗子,就是一个容器不受外界影响,从一而终就是这么大,尺寸不会随着外界条件变化;除非不想要,那么换另一个容器,同样这个容器的大小从一而终也是不变的。
等价替换于我们的const,定义一个变量使它的值不变(从定义处到程序结束)。比如,定义一个容器bufsize:
const int bufsize = 512;
在这里,bufsize就是一个整型常变量,从这个定义语句开始一直到结束,bufsize的值一直是512。加入我觉得这个512定义的小了,那么我们需要做的就是将bufsize的值变大:
const int bufsize = 700;
这样之后,从定义处开始bufsize的值就变成了700。由此,const对象一旦创建之后值就不能改变,所以const对象必须初始化。
2.初始化和const
const类型最大的特点就是值不变,所以const类型能执行只能是不改变其内容的操作。有必要提一嘴初始化,我们在用const型对象(a)去初始化另一个对象(b)时(下面代码段),无论b是否是const都可以初始化,因为const除了改值其他的操作都可以执行,给别的对象初始化的操作听起来像取const值,也就是:
#include
const int a = 10;
int main()
{
int b = a;
std::cout << a << " " << b;
return 0;
}
3.const一些要注意的点
Ⅰ.const默认只在当前文件内有效,换言之,如果在5个文件出现了同名的(例如:const a)那么其实这是5个const a常变量,互相不搭界的;
Ⅱ.那么,如果我们想让一个const常变量熟练的往返于多个文件呢,这就用到了声明和定义的概念。我们在一个文件中定义一个const再从别的文件声明它,也就完成了1个const多个文件之间流连。具体操作是在定义和声明之前都加上关键字extern,声明+初始化也就完成了它的定义,再次使用时声明即可。
extern const int bufsize = fun();//定义
extern const int bufsize;//声明
一、const引用
1.概念:
把引用绑定在const对象上(也叫做对常量的引用)
2.引用及其对应的对象类型相同
如果引用是常量,那么对象也应是常量
const int a = 1024;
const int &b = a;//a是常变量,b也是常变量,正确
int &c = a;//c是非常量引用,不可指向常变量对象,错误
二、顶层const和底层const
现在是2024年1月20日晚上20点50分,我对顶层和底层const理解的还是不够清晰,已经在问了,总会弄明白的。那么就先说一下已经弄明白的。
下面我们拿指针举例:
类型 | 顶层const | 底层const |
谁是常量 | 指针本身 | 指针指向的对象 |
关联 | 任意的对象是常量 | 与复合类型的基础类型有关 |
修饰什么 | 基础类型对象 | 修饰引用类型 |
以上就是我暂时知道的,我还会学,请耐心等待......
三、constexpr变量
1.存在意义:
便于编译器验证变量的值是否是一个常量表达式
2.内在
声明为constexpr的变量一定是常量,必须用常量表达式进行初始化。如果认为一个变量是常量表达式,那么就把它声明成constexpr变量。
一、类型别名
1.概念
是一个名字,某种类型的同义词
2.存在的意义
将晦涩难懂或难拼难写的类型名变得简单易懂
3.使用方式
类型别名与类型名等价,换言之,有类型名的地方就能用类型别名代替
4.两种形式
Ⅰ.传统关键字typedef
typedef double wages;//wages是double的同义词
typedef wages base, *p;//base是wages的同义词而p是wages*的同义词
Ⅱ.别名声明关键字using
using SI = Sales_item;//SI是Sales_item的同义字
SI A 与 Sales_item A 等价
二、auto类型说明符
1.概念
让编译器根据初始值推算变量类型
2.存在意义
在声明变量时不确定表达式类型时可以将其设定为auto,让编译器根据表达式的结果推算该式的数据类型。
auto a = v1 + v2;
3.注意点
Ⅰ.上面说过,auto通过表达式初始值推算变量类型,所以表达式必须初始化。
Ⅱ.一条声明语句中只有一个数据类型,所以,在同一条声明语句中,变量的数据类型都一样。
此处会结合侯捷老师面向对象高级开发的课程进行双方总结,请大家耐心等待……