const:大致意思是“我永远不改变这个值”,在作为变量传入函数时不用担心在函数内被改变。这里由编译器确认const承诺。
constexpr:大致意思时“在编译时求值”,允许将数据放在只读内存内以及提升性能。注意:用constexpr是在编译过程中确定值的,其表达式必须都是
constexpr。
在用constexpr定义的函数中,函数必须非常简单,且函数中只能有一条计算某个值的return语句。如:
constexpr double square(double x){return x*x;}
注意:此函数传入的类型可以是常量也可以是非常量,若是常量则会在编译时处理,如是非常量则这个函数将会退化为普通函数。
#include <iostream>
using namespace std;
constexpr double square(double x){return x*x;}
int main(){
double a = 3;
constexpr double tmp = 1;
constexpr double x = 5*tmp;
cout <<" "<< square(x) <<" "<< square(a) << endl;
}