constexpr和常量表达式

在一个复杂的系统当中,很难分辨出一个初始值是不是常量表达式,当然我们可以定义一个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是一个指向整型常量的常量指针
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 基本内置类型 算术类型字符整型布尔值浮点数 空类型(void) 算术类型 带符号类型和无符号类型int、short...
    2625K阅读 3,270评论 0 1
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,533评论 1 51
  • C++中变量以及基本类型 内置类型包括:字符,整型,浮点型等;同时C+还支持更加复杂的数据类型,首先来看看基本的内...
    秋风弄影阅读 758评论 0 1
  • 1,从本篇文章中我学到的重要的概念: 大家对伦敦有不同的看法。伦敦是一个大城市,是多元文化。在我心目中,能出国一趟...
    郭媛1号阅读 128评论 2 0
  • 前几天写到大一总结中的校园活动篇时 发现好多活动都是我们俩组团一起的 话剧《家》的排演,你向老师推荐了我,让我有幸...
    台木阅读 214评论 0 1