c++学习笔记小记(2)

1. 本节讲述顶层const和底层const的相关知识

顶层const表示指针本身是个常量

底层const表示指针所指的对象是一个常量

const int *const p  //靠右的是顶层const,靠左的是底层const

const int *p  //指向整型常量的指针  底层const

constexptr int *p //指向整数的常量指针  顶层const

如果确定某个对象hi常量,用constexptr 修饰,这样编译器就可以验证变量的值是否是一个常量表达式

const int sz = get_size();  //虽然此处用const修饰,这并不是一个常量表达式,因为sz的值在运行时才能够确定,此时若                                                  用constexptr修饰,编译时编译器会给出提示 

(1)auto类型说明符(用表达式的值初始化auto类型的变量)

用auto类型能够让编译器替去分析表达式所属的类型

auto item = v1+v2; //item的类型由v1加v2的类型来决定

引用作为初始化的值,以引用的对象的类型作为auto的类型

另外,auto一般会忽略顶层const,保留底层const

const int ci = i,&cr = ci;

auto b = ci;   //b是一个整数(ci的顶层const被忽略掉了)

若想让b成为一个const,则需要定义为:const auto b = ci;

auto e = &ci;    //e是一个指向整数常量的指针(对常量对象取地址是一种底层const)

(2)decltype类型说明(不用表达式的结果初始化decltype的变量,只用表达式结果的类型声明decltype的变量)

const int ci = 0,&cj = ci;

decltype(ci) x = 0;//x的类型是const int

decltype (cj)y = x; //y的类型是const int&

decltype(cj)z;  //错误,z是一个引用,必须初始化


int i = 42,*p = &i,&r=i;

decltype(r+0) b;//正确,加法的结果是int,b是int类型

decltype (*p) c;//错误,c是int&,必须初始化。解引用得到指针所指的对象,还能给这个对象赋值,因此decltype(*p)                                   的结果类型就是int&

decltype((i)) d; //错误,d是int&,必须初始化,双括号的结果永远是引用 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值