现在企业级的C++更多的采用C++11标准。因此,我们在本节讲述C++11标准相对于C++03所引入的新特性。
可以从初始表达式中推断出变量的类型,大大简化编程工作
这属于编译器特性,不影响最终的机器码质量,不影响运行效率。意思就是写auto和写int,生成的二进制代码一样,只不过auto更华丽一些。但同时多了缺点:不清晰。
int *ptr = NULL; // 不推荐使用
int *ptr = nullptr; //推荐使用
以后声明空指针全部采用nullptr,不采用NULL。因为NULL其实就是数字0,整型数字:0。
为什么不推荐呢?下面举个例子说明:定义两个重载函数,一个传整型,一个传指针
void func(int v) {
cout << "void func(int v) " << endl;
}
void func(int *v) {
cout << "void func(int *v) " << endl;
}
我想请问一下,传入NULL会执行哪个函数?
func(NULL);
结果是执行的整型函数,因为NULL=0。但是这种写法在98标准中就会报错,因为会产生二义性。C++11修复了这个bug,我们可以通过传入nullptr,达到调用第二个的目的
func(nullptr);
所以说,nullptr是专业的空指针,NULL是专业的0和不专业的空指针。
定义一个数组,然后循环遍历打印。我们可能会这样做:
int array[] = { 1,2,3,4,5 };
for (int i = 0; i < 5; i++) {
cout << array[i] << endl;
}
但是C++11推出快速遍历写法:
int array[] = { 1,2,3,4,5 };
for (int i : array) {
cout << i << endl;
}
格式是:
for(数据类型 元素 : 数组)
{
// do something 元素
}
这与python中的循环一样
for i in array:
# do something i
只不过C++将in换成了 “ :”。