C++中的constexpr关键字

来源:互联网 发布:sql server2005企业版 编辑:程序博客网 时间:2024/05/29 15:04

常量表达式(const expression)是指值不会改变并且在编译过程中就能得到计算结果的表达式。显然,字面值属于常量表达式,用常量表达式初始化的const对象也是也是常量表达式。

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

                                ——《C++primer》P58

constexpr变量

    对于是否是常量表达式的界定显得很不清晰。我们可以利用constexpr类型显式验证。    例如:
constexpr int mf = 20;//正确,20是常量表达式constexpr int limit = mf+1;//正确,mf+1是常量表达式constexpr int sz = size();//只有size是constexpr函数时成立
    除了变量同样能声明constexpr指针,这种指针的特点是该指针指向内容的地址固定不变。有点类似与底层const指针。

constexpr函数

    constexpr函数是指能够用于常量表达式的函数,函数的返回类型及所有形参的类型都得是字面值类型,而且函数体内只能有且只有一条return语句。
constexpr int new_sz(){return 42;}//constexpr函数constexpr size_t scale(size_t cnt){return new_sz()*cnt;}//constexpr函数但不一定返回常量表达式int arr[scale(2)];//正确 scale(2)是常量表达式int i = 2;int a2[scale(i)];//错误:scale(i)不是常量表达式

  因此,constexpr函数需要放在头文件中,因为代码段在调用时,需要知道该函数的定义。
原创粉丝点击