常量表达式 & constexpr

Posted GGBeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常量表达式 & constexpr相关的知识,希望对你有一定的参考价值。

【常量表达式】

一个这样的表达式:值不会改变 && 在编译过程中就能够得到计算结果

常见的常量表达式:字面值、用常量表达式初始化的const对象

一个对象是不是常量表达式由它的数据类型和初始值共同决定:

  const int cc = 1;  cc是一个常量表达式,因为它①是一个常量,②值在编译过程就能够得到(使用字面值初始化的)。

  int cz = 1;       cz尽管由字面值初始化,但它的数据类型是int,所以它不是常量表达式。

  const int cd = get_val();  cd不是一个常量表达式,尽管它是一个常量,但它的值直到运行时才能获取到。

运用到常量表达式的情形:数组的大小

 

【constexpr变量】

因为很难分辨一个初始值到底是不是常量表达式,所以我们推出了constexpr类型。

声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化:

  constexpr int mf = 20;

  constexpr int lm = mf + 1;

  constexpr int sz = get_val();

不能使用普通函数作为constexpr变量的初始值,所以上面的get_size()必须是constexpr函数,这种函数足够简单以至于编译时就可以计算其结果。

用处,比如你想设置一个常量表达式作为数组的大小,便可以设置如上变量。

 

以上是关于常量表达式 & constexpr的主要内容,如果未能解决你的问题,请参考以下文章

constexpr介绍以及与const的区别

constexpr:确定性的常量优化

constexpr和字面值常量类

当值是非常量但使用常量表达式初始化时使用 constexpr?

[C++11]constexpr修饰常量表达式

C++constexpr和常量表达式