突然发现C++14都要出来了,然而我居然还没仔细的去了解C++11,飘了飘了…
在网上搜了下C++11的相关文章,感觉酷壳的这篇文章介绍的比较好.
然后发现constexpr
这个C++11中新出现的关键字介绍比较少,于是就谷歌了一番,做了点总结.
constexpr
的含义为常量表达式,编译器在编译期间就能求值,因此只能用常量或者常量表达式来初始化.这是一种很强的约束,能保证程序的语义不会受到破坏,并且相比于宏而言,它更安全。
constexpr
函数的限制有:
- 函数必须有返回值.
- 函数必须存在定义.
- 函数中仅能有一个
return
,但允许包含typedef、 using 指令、静态断言等. - 只能调用其它constexpr函数或constexpr变量.
constexpr函数可以使用递归:
constexpr int recursion(int n){
return n > 10 ? recursion( n + 2 ) : 10;
}
构造函数的常量表达式限制有:
1. 函数体必须为空
2. 初始化列表只能由常量表达式来赋值
class Math{
public:
constexpr Math(int x, int y, int z): _x(x),_y(y),_z(z){}
constexpr int sum(){
return _x+_y+_z;
}
constexpr int mult(){
return _x*_y*_z;
}
private:
int _x, _y, _z;
}
int main(){
constexpr Math m {2,3,4};
constexpr int v = m.sum();
cout<< v << endl;
}