第二章 变量与类型(下)

2.4 const限定符

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变量。

2.5 处理类型auto

一、类型别名

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通过表达式初始值推算变量类型,所以表达式必须初始化

Ⅱ.一条声明语句中只有一个数据类型,所以,在同一条声明语句中,变量的数据类型都一样。

2.6编写自己的头文件

此处会结合侯捷老师面向对象高级开发的课程进行双方总结,请大家耐心等待……

 

 

 

 

你可能感兴趣的:(每周学点C++,开发语言,c++)