constexpr主要做了两件事:
- 让修饰的东西在编译期就做完,而不必等到运行期
- 把const的作用细化
const并未区分出编译期常量和运行期常量,constexpr限定在了编译期常量。
一般来说编译期只是生成一些符号表,VM等等
但是修饰函数又有些特殊。
如果这个函数的实参是在运行期才能传入,那么这个constexpr是无效的,和普通函数一样
除此之外,被他修饰的函数隐式添加了一个inline关键字,减小了栈内存的消耗,提高了效率。
第二点细化const
在C里面,const只有只读的作用,而在C++中承担了常量的作用,因此,C++11把他拆分开来,把常量的作用分给constexpr