1.1 constexpr修饰普通变量 C++11 标准中,定义变量时可以用constexpr 修饰,从而使该变量获得在编译阶段即可计算出结果的能力。 注意:使用 constexpr 修改普通变量时,变量必须经过初始化且初始值必须是一个常量表达式。举个例子: #include <iostream> using namespace std; int main() { constexpr int num = 1 ...
constexpr变量可以作为数组的长度、枚举的值、模板参数等。与const变量不同,constexpr变量的值在编译时即...
以上从底层汇编指令的角度感受了一下constexpr的作用,总之,const通常用于限定变量运行期的“不可变性”,也可用于定义常量;constexpr用于定义常量、常量表达式或常函数,实现编译期计算。
constexpr int m = 10;//20是常量表达式 constexpr int n = m + 1;//m+1是一个常量表达式 //* & 都不属于常量表达式 constexpr const int *p = &m;//错误 constexpr const int &r = m;//错误
【1】constexpr VS const const修饰的都是具有运行时常量性; constexpr修饰的都是具有编译时常量性; 假如你将一个成员函数标记为constexpr,则顺带也将它标记为了const。如果你将一个变量标记为constexpr,则同样它是const的。 但相反并不成立,一个const的变量或函数,并不是constexpr的。
你可以知道我们为什么建议使用常量constexpr,它比const优秀?const const是一个C语言的关键字,它限定一...
constexpr int max_value = 100; 与const 类似,这里 max_value 被定义为一个常量,但 constexpr 确保了 max_value 可以在编译期被计算和使用。 2. constexpr 函数 constexpr int square(int x) { return x * x; } 在这里,square 函数被定义为 constexpr,意味着如果在编译期传入常量参数,该函数的结果也...
总的来说在 C++ 11 标准中,const 用于为修饰的变量添加“只读”属性;而 constexpr 关键字则用于指明其后是一个常量(或者常量表达式),编译器在编译程序时可以顺带将其结果计算出来,而无需等到程序运行阶段,这样的优化极大地提高了程序的执行效率。
修饰变量的时候,可以把 constexpr 对象当作加强版的 const 对象:const 对象表明值不会改变,但不一定能够在编译期取得结果;constexpr 对象不仅值不会改变,而且保证能够在编译期取得结果。如果一个 const 变量能够在编译期求值,将其改为 constexpr 能够让代码更清晰易读。
struct S { constexpr S(int);};const S s0(0);constexpr S s1(1);s0是一个常量,但它不承诺在编译时初始化。s1是标记的constexpr,所以它是一个常量,因为它S的构造函数也被标记constexpr,它将在编译时初始化。大多数情况下,这很重要,因为在运行时初始化会非常耗时,并且您希望将该工作...