网站建设与网络推广的关系,wordpress如何进入后台,网站建设报价方案下载,南京做网站优化公司constexpr 是 C 11 标准新添加的关键字#xff0c;原先的标准中是只有const关键字的#xff0c;作用是表示只读常量。但是#xff0c;其实只读常量是两个属性#xff0c;分为只读和常量#xff0c;都用const来表示会产生歧义。
看下面的例子
#include iostream
…constexpr 是 C 11 标准新添加的关键字原先的标准中是只有const关键字的作用是表示只读常量。但是其实只读常量是两个属性分为只读和常量都用const来表示会产生歧义。
看下面的例子
#include iostream
#include array
using namespace std;const int func1(){return 10;
}int main(){arrayint, func1() arr1;return 0;
}
对于arr1虽然我们传入的也是一个常量但是const 返回类型仅仅表示a是一个只读属性的变量而不是一个常量。只读变量和常量之间是有区别的明确这点非常重要。所以上面的例子中func1编译会报错报错信息为如下。
\test.cpp: In function ‘int main()’:
test.cpp:16:21: error: call to non-‘constexpr’ function ‘const int func1()’16 | arrayint, func1() arr1;| ~~~~~^~
这里补充const的一个重要概念就是const后面的变量仅仅表示不能通过该变量改变背后实际的值但是如果其他变量也能够表示同一块内存空间这个内存空间里的值是可以通过其他变量来改变的。
上面的程序做如下修改arr2就可以正常的编译因为传入的是一个constexpr代表的常量类型。
#include iostream
#include array
using namespace std;const int func1(){return 10;
}constexpr int func2(){return 20;
}int main(){// arrayint, func1() arr1;arrayint, func2() arr2;return 0;
}
constexpr的出现就是将原先只读常量是只读还是常量的模糊边界区分开分成了只读属性使用const和常量属性使用constexpr。 其实还有编译阶段的不同后面有空再补充。。。