C++20 新增了两个 const 相关的关键字,于是当前存在四个相似的关键字:const,constexpr,consteval 和 constinit。 接下来分别来进行讨论。 第一,经过 const 修饰的变量具有只读属性,并且初始化发生于运行期。也就是说,若一个变量定义之后不允许被修改,就应该给它加上 const。若在一个成员函数中不修改任何成员变量,就应该在成员函数后面加上 const。但是,它也可能发生于编译期,例如以 const int 代替宏来定义数组大小。 第二,经过 constexpr 修饰的变量或是函数,既保证只读,又发生于编译期。然而,只有在参数是常量,和显式地以其返回值来初始化一个编译期常量时,它修饰的函数才会一定发生于编译期。如: constexpr int sqr(int n) { return n * n; } int main() { // compile time static_assert(sqr(10) == 100); // compile time int array[sqr(10)]; // compile time constexpr int res = sqr(10);… Continue Reading Differences between keywords constexpr, consteval and constinit