Bootstrap

c++基础4

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。

;