C++常量表达式函数的约束之一:常量表达式函数在使用前必须被定义。
1、对于普通函数而言,调用函数前只需要有函数声明即可,函数的定义是非必要的;
2、表达式但常量表达式函数的使用则有所不同,在使用前必须要被定义;
3、需要区分常量表达式函数的“使用”和“调用”的区别:前者是编译时的值计算,而后者是运行时的函数调用,如:
constexpr int func();
int ordinaryVal=func(); // 编译通过
const int constVal=func(); // 编译通过
constexpr callVal=func(); // 无法通过编译,func还没定义
constexpr int func(){return 1;}
constexpr int callVal1=func(); // func定义了,通过编译