C++Primer(第五版)学习笔记——复合类型及const限定符(第二章)

const的对象必须初始化。

一条声明语句由一个基本数据类型,和紧随其后的声明符列表组成,类型修饰符是声明符得一部分。

int *p;
int *&r= p; // r 是一个对指针的引用(从r开始向左看,知道r是一个引用->绑定的是一个指针->指针的类型是int)

引用(左值):

引用必须初始化,引用是和它的初始值绑定在一起

引用不是对象,它只是他所绑定的对象的另外一个名字,所以不能定义一个引用的引用。

除了对常量的引用以及对基类的引用外,引用的类型都要和他绑定的对象的类型一致。

(左值)引用只能绑定在对象上,不能与字面值或某个表达式的计算结果绑定在一起。

指针:

常量指针是指,指针本身是一个常量;指针常量指的是指针指向的是常量。

指针是一个对象,可以不初始化,如果在一个块作用域内,指针不被赋初值,那它将是未定义的。

void*是一种特殊类型的指针,可以用于存放任意对象的地址,但是不能直接操作viod*所指的对象。

对const的引用:

只有常量引用才可以绑定到常量对象上。

允许为一个常量引用绑定一个非常量对象、字面值、甚至是一个一般表达式,只要结果能够转换成引用的类型。

常量引用不能修改他所绑定的对象,但是可以通过其他方式修改该对象。

但一个常量引用绑定到另一种类型上是,引用绑定的其实是一个临时量:该对象的拷贝。

指针和const:


常量指针:指针本身是一个常量,常量指针必须初始化,且之后不可改变。

指针常量:指向一个常量的指针。

只有指针常量能指向一个常量对象,同引用,允许一个指针常量,指向一个非常量对象。

顶层const和底层const:

当修饰的是一个引用或指针指向的对象时,是一个底层const

当修饰的是一个基本数据类型或一个指针时,是一个顶层const

当执行对象的拷贝操作时,顶层const不受影响,但是拷入和拷出的对象必须具有相同的底层const(就是说只有指向const的指针可以拷贝一个指向const的指针)

常量表达式和constexpr:

常量表达式是指值不会改变,且在编译过程就能得到计算结果的表达式

用常量表达式初始化的const对象也是常量表达式。

一个对象(表达式)是不是常量表达式由它的数据类型和初始值共同决定。

将变量声明为constexpr类型,由编译器来验证变量的值是否是一个常量表达式。

字面值类型:声明constexpr时用到的初始化值的类型。

算术类型、指针、引用都是字面值类型。

constexpr类型的指针(0 或者nullptr也可以)和引用只能指向(绑定)存放在固定地址的对象上(不是const对象)。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值