1.一切皆可用列表初始化(不是初始化列表)
列表初始化就是在对自定义类型或者内置类型进行初始化的时候,不适用"="号来赋值
比如:

这两种都是列表初始化的一种.

而这种则是涉及到隐式类型转换的列表初始化.
自定义类型的列表初始化都是由其自身的构造支持的

内置类型则是其本身就支持,比如数组等内置类型.
而容器如果想支持不固定的列表参数初始化,则会调用initializer_list来支持其进行不固定的初始化

v1的初始化是直接调用vector的构造进行初始化,而v2就是一种列表初始化,这种初始化就会调用vector的initializer_list ,来进行一种隐式类型转换,他中间会生成一个临时变量来进行初始化
2.左值和右值
左值(可以被取地址的值),右值(不可以被取地址的值),但是左值和右值他并不是一个简单的值,而是一种表达式
1.左值

2.右值,右值引用
右值也是一个表述数据的表达式,如:字面常量,表达式返回值,函数返回值(这个不能是左值引用返回)等等,右值可以出现在赋值符号的右边,但是不能出现在赋值符号的左边,右值不能取地址,右值引用就是对右值的引用,给右值取别名

3.左值引用和右值引用
左值引用就是给左值取别名,这个很好理解

直接搞个引用就行了
而右值引用就是给右值取别名

既然左值引用就是给左值取别名,右值引用就是给右值取别名,那么左值引用能否给右值取别名?右值引用又能否给左值取别名?

从这里能看到,左值引用并不能给右值取别名,但是如果加上const,就可以实现左值引用给右值取别名了.


而相应的,右值引用也不能直接给左值取别名,但是如果给左值加上move,就可以取别名了.

9948

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



