CPP11特性之nullptr及constexpr

nullptr

nullptr是c++11用来表示空指针新引入的常量值,在c++中如果表示空指针语义时建议使用nullptr而不要使用NULL,因为NULL本质上是个int型的0,其实不是个指针。举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
void func(void *ptr) {
cout << "func ptr" << endl;
}

void func(int i) {
cout << "func i" << endl;
}

int main() {
func(NULL); // 编译失败,会产生二义性
func(nullptr); // 输出func ptr
return 0;
}

constexpr

constexpr 关键字的功能是使指定的常量表达式获得在程序编译阶段计算出结果的能力,而不必等到程序运行阶段。C++ 11 标准中,constexpr 可用于修饰普通变量、函数(包括模板函数)以及类的构造函数。

常量表达式(const experssion)是指:

(1)值不会改变

(2)在编译过程就能得到计算结果的表达式。

constexpr和const的区别:

两者都代表可读,

const只表示read only的语义,只保证了运行时不可以被修改,但它修饰的仍然有可能是个动态变量,

而constexpr修饰的才是真正的常量,它会在编译期间就会被计算出来,整个运行过程中都不可以被改变,constexpr可以用于修饰函数,这个函数的返回值会尽可能在编译期间被计算出来当作一个常量,但是如果编译期间此函数不能被计算出来,那它就会当作一个普通函数被处理。