美文网首页
constexpr和常量表达式

constexpr和常量表达式

作者: Troll__Zhao | 来源:发表于2016-01-21 15:01 被阅读0次

在一个复杂的系统当中,很难分辨出一个初始值是不是常量表达式,当然我们可以定义一个const变量并且设置初始值为我们认定的某个常量表达式,但是在实际应用当中,我们常常会发现初始值并非时常量表达式的情况,C++11给我们提供了constexpr关键字以便由编译器来验证变量的值是否是一个表达式。
同const型变量一样,constexpr一旦声明必须初始化,一个constexpr型指针必须初始化为nullptr或者0,或者是存储在固定地址的变量

这里到存储在固定位置的变量指的是,定义在所有函数体外的变量,或者是一类有效范围超过函数本身的变量,这些变量都是存储在固定位置的变量。

constexpr型变量对类型有着限制,这些类型一般比较简单,容易得到,称之为“字面值类型”,在我们常见的类型当中:算术类型、引用和指针都是字面值类型。而我们自定义的类、IO库、string等等类型则不是字面值类型。

我们必须注意一点,如果在constexpr声明中定义了一个指针,限定符仅仅对指针有效,而对指针所指向的对象无关:

上述的话的意思是,当我们定义了一个变量,且使用了constexpr,那么,这个constexpr把他所定义的指针置为了顶层const

下面我们看一下例子:

const int  *p = nullptr;                   //p是一个指向整型常量的指针
constexpr int *q = nullprt;             //q是一个指向整数的常量指针
constexpr const int *cp = nullptr; //cp是一个指向整型常量的常量指针

相关文章

  • constexpr和常量表达式

    在一个复杂的系统当中,很难分辨出一个初始值是不是常量表达式,当然我们可以定义一个const变量并且设置初始值为我们...

  • c++nullptr(空指针常量)、constexpr(常量表达

    总述 又来更新了,今天带来的是nullptr空指针常量、constexpr(常量表达式)C++的两个用法。Resu...

  • 2017-08-16,17c++笔记

    1 constexpr是C++11中新增的关键字,其语义是“常量表达式”,也就是在编译期可求值的表达式。 2 模板...

  • 关于常量表达式(constexpr)

    首先,常量表达式的概念:在编译期就可以计算出结果的表达式那么为什么要用常量表达式呢,用常量表达式会有什么好处:1....

  • C++14

    Lambda 函数constexpr类型推导二进制常量变量模板

  • 002 constexpr

    C++ 11 新标准规定,允许将变量声明为 constexpr 类型以便由编译器来验证变量的值是否是一个常量表达式...

  • 2018-05-06

    auto 模板别名 收缩转换 constexpr inline lambda表达式 初级 高级 函...

  • 二、python运算符

    表达式 变量或(和)常量和运算符(又叫操作符)的组合叫表达式。表达式中的变量或常量称为操作数,表达式可分为多种类别...

  • 《日子》golang-常量与运算符

    常量的定义 -常量的值在编译时就已经确定-常量的定义格式与变量基本相同-等号右侧必须是常量或常量表达式-常量表达式...

  • constexpr:编译期与运行期之间的神秘关键词

    参考大神博客,整理constexpr的用法和注意事项 一、概念,constexpr objects C++ pri...

网友评论

      本文标题:constexpr和常量表达式

      本文链接:https://www.haomeiwen.com/subject/rnvlkttx.html