总的来说在 C++ 11 标准中,const 用于为修饰的变量添加“只读”属性;而 constexpr 关键字则用于指明其后是一个常量(或者常量表达式),编译器在编译程序时可以顺带将其结果计算出来,而无需等到程序运行阶段,这样的优化极大地提高了程序的执行效率。
它们的主要区别如下: 1. const是给变量加上只读属性,而constexpr是给变量或函数加上常量属性。constexpr变量必须在编译时就可以计算出来,而constexpr函数的返回值也必须是常量并且在编译时必须可以计算出来。 2. constexpr可以用来定义数组和结构体等复杂数据类型,而const则只能用来定义单个变量。 3. constexpr变量通常...
constexprvoidfunc2(){}//普通函数,constexpr必须有非void的返回值类型constexprintfunc3();//注意这里只声明,定义在main()函数之后//constexpr int func4()//编译失败//{//int x = normalfunc(2);//调用了非constexpr函数!//return x;//}//幂函数:用于计算base的exp次幂constexprintpow(intbase,inte...
constexpr 和 const都用于声明常量,但它们有几个关键的区别: 1. 编译时计算 vs 运行时计算 const: 指定一个值不可修改,但是在运行时计算。 constexpr 用于在编译时计算值,这意味着在编译时就能确定这个值,而不需要等到运行时。 2. 在编译时求值 constexpr变量必须在编译时计算出其值。 const变量可以在运行时...
不同点:const声明的常量,初始值引用的对象不一定是一个常量;constexpr声明的常量,初始值一定是常量表达式。 constexpr是c++11标准添加的关键字。 之所以说const声明的常量,初始值不一定是一个常量,主要是从引用和指针的角度出发的。如果初始化const时候,指定一个固定的字面值常量,那么它引用的肯定是常量。
const可以用于不同的上下文,包括变量、函数参数和函数返回值。 声明为const的变量在运行时是只读的,无法修改其值。 const可以用于运行时确定的值,也可以用于编译时无法确定的值。 示例: const int x = 10; // x是一个编译时常量 void foo(const int a); // a是一个只读参数 2.constexpr: constexpr是C++...
理解了 const 和 constexpr 的基本概念后,我们来看看它们的主要区别: 1. 编译期和运行期 const 强调的是运行期不可修改性,即变量在初始化后,其值在程序运行期间不能改变。constexpr 强调的是编译期求值,即表达式的值可以在编译期计算出来,从而在编译期就确定常量值。
const和constexpr的区别和constexpr的优化 constexpr主要做了两件事: 让修饰的东西在编译期就做完,而不必等到运行期 把const的作用细化 const并未区分出编译期常量和运行期常量,constexpr限定在了编译期常量。 一般来说编译期只是生成一些符号表,VM等等 但是修饰函数又有些特殊。
四、const和constexpr的区别对比 4.1、编译时计算能力 4.2、可以赋值的范围 4.3、对类和对象的适用...