关于const和constexpr
2017-12-24 14:49 yangkehong 阅读(165) 评论(0) 收藏 举报constexpr- specifies that the value of a variable or function can appear in constant expressions
语义上:
const并未区分出编译期常量和运行期常量
constexpr限定在了编译期常量
constexpr限定在了编译期常量
constexpr表示在编译期就可以算出来(前提是为了算出它所依赖的东西也是在编译期可以算出来的)。
而const只保证了运行时不直接被修改(但这个const的变量或函数仍然可能是个动态变量, 我们很多时候可以将非const对象加上const属性做为参数传给其他模块使用,即告诉使用模块不能修改它)。
使用建议:
constexpr修饰的函数,简单的来说,如果其传入的参数可以在编译时期计算出来,那么这个函数就会产生编译时期的值。
但是,传入的参数如果不能在编译时期计算出来,那么constexpr修饰的函数就和普通函数一样了。不过,我们不必因此而写两个版本,所以如果函数体适用于constexpr函数的条件,可以尽量加上constexpr。
constexpr是一种比const 更严格的束缚, 它修饰的表达式本身在编译期间可知, 并且编译器会尽可能的 evaluate at compile time. 在constexpr 出现之前, 可以在编译期初始化的const都是implicit constexpr. 直到c++ 11, constexpr才从const中细分出来成为一个关键字, 而 const从1983年 c++ 刚改名的时候就存在了... 如果你初学c++, 应当尽可能的, 合理的使用constexpr来帮助编译器优化代码.
浙公网安备 33010602011771号