c++学习记录

学习过程记录

文章目录

constexpr和const

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;

decltype

有时会遇到这种情况:希望从表达式的类型推断出要定义的变量的类型,但是不想用该表达式的值初始化变量。为了满足这一要求,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&,必须初始化

生活总会有不如意,坚持就好了。继续加油吧。

上一篇:C++ decltype类型推导


下一篇:c++11 追踪返回类型