一、首先:const 修饰的对象未必是编译期常量;
const int number = n;
number 就不是编译期变量;
const int n = 10; 编译期变量 --- 类似C语言数组,数组大小必须是编译期变量
而,constexpr ---> constant expression
const int cm = 4; // 编译期常量,等价于: constexpr int cm = 4;
constexpr 不仅可以修饰变量,也可以执行函数:、
constexpr int foo(int n)
{
int a = n*n;
return a;
}
那么上面这个函数,就会在编译期计算;
那么就可以这么定义:
std::Array<int foo(4)> m ; 是可以通过的。
二、constexpr :用在所有被要求使用“constant expression”的地方(就是constexpr 修饰的东西可以在编译期计算得到值),主要目的是让编译器能够优化代码提升性能 。
三、用断言调试函数(assert)
#include <cassert>
assert(f==6); 就会在这里判断这个条件,如果不成立,就会执行abort() 强制中断程序
static_assert(f==6,"hello"); 如果条件不成立,就会在编译的时候,提示“hello”;