这是C++11新特性介绍,虽然现在来说有些不合时宜,但是也有一些有趣的地方。觉得麻烦的可以直接跳到最后哦!
新类型
long long类型
C++11标准中新加入了long long类型属性,占用空间不小于long类型。测试代码如下:
long large = LONG_MAX;
long long long_large = LLONG_MAX;
long long long_long_large = 1LL << 63;
cout<<"test long long:"<<large<<'\t'<<long_large<<'\t'<<long_long_large<<endl;
在我的机器上实测,long long类型和long类型同样使用64bit空间。
nullptr字面量
C++11标准中专门为空指针增加了nullptr字面量,同时不推荐再使用NULL或者0表示空指针。
int *p1 = nullptr;
int *p2 = 0;
int *p3 = NULL;
cout<<"test nullptr: "<<(p1 == p2)<<'\t'<<(p1 == p3)<<endl;
最终测试结果,nullptr和NULL和0是一样的。
constexpr
C++11标准中新增constexpr用于声明常量表达式,编译器会验证此变量的值是否是一个常量表达式。
int out_i = 0; // out_i定义于函数外部
...
constexpr int mf = 20;
constexpr int limit = mf + 1;
constexpr int *p4 = &out_i;
// the following would cause a make error
// since large is not a constexpr
//constexpr int wrong = large + 1;
// since &in_j is not a constexpr;
//int in_j = 0;
//constexpr int *p5 = &in_j;
值得注意的是,constexpr指针可以指向非常量变量,只要此变量定义于函数之外,因为这样的变量的指针(地址)