学习过程记录
constexper是一个在编译的过程中就可以得到计算结果的常量
constexpr int sz = size();
当使用函数作为constexpr的初始值的时候,不能使用普通函数,同样需要定义constexpr的函数。需要按下面去定义,不然就会报错。
constexpr int size(void) { return 5; }
在constexpr声明中如果定义了一个指针,限定符constexpr仅对指针有效,对指针所指的对象无关。
const int *p = nullptr;//指向整型常量 constexpr int *p = nullptr;//指向整数常量
起别名之前我没见到过,这里r相当于a。
&r = a;
有时会遇到这种情况:希望从表达式的类型推断出要定义的变量的类型,但是不想用该表达式的值初始化变量。为了满足这一要求,C++11 新标准引入了第二种类型说明符decltype,它的作用是选择并返回操作数的数据类型。在此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的值:
const int ci = 0, &cj = ci; decltype (ci) x = 0;//x的类型是const int decltype(cj)y = x;//y的类型是const int&,y绑定到变量x decltype(cj) z;//错误:z是一个引用,必须初始化
声明指针的时候必须初始化,因为是 int & 类型。
//decltype的结果可以是引用类型 int i = 42,*p = &i, &r = i; decltype(r + 0) b;//正确:加法的结果是int,因此b是一个(未初始化的)int decltype (*p) c;//错误:c是int&,必须初始化
生活总会有不如意,坚持就好了。继续加油吧。