1.范围for
c++中提供了一种新的方式打印数组:
这里的e就是一个临时变量,a每次赋值给e,然后将e打印,自动识别类型,自动++。
这里的改变e是无法改变到a的,但是我们可以将e变为a的别名就可以了。例如将每个数都加一:
范围for的使用条件:
for循环迭代的范围必须是确定的 对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供begin和end的 方法,begin和end就是for循环迭代的范围。
2.指针空值nullptr(C++11)
NULL实际是一个宏,在传统的C头文件(stddef.h)中,可以看到如下代码:
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
可以看到,NULL可能被定义为字面常量0,或者被定义为无类型指针(void*)的常量。不论采取何种定义,在 使用空值的指针时,都不可避免的会遇到一些麻烦,比如:
void f(int)
{
cout<<"f(int)"<<endl;
}
void f(int*)
{
cout<<"f(int*)"<<endl;
}
int main()
{
f(0);
f(NULL);
f((int*)NULL);
return 0;
}
我们看一下运行结果:
我们发现当我们调用f(NULL)时其实是调用的整型的参数f(int),这是因为NULL宏定义为0,或者((void*)0)不明确。
因为有这些缺陷,所以我们c++中加入了nullptr,他的意思其实就是((void*)0)
注意:
1. 在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入的。 2. 在C++11中,sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同。
3. 为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr。