简述:初识C++章节最后一节啦 整体感觉就是C++像是C++的补充和升级 以一种更简单的方式奔向普罗大众 从而也能使更多人接受编程 当然不是讲C++简单 就是C++像是从机器时代进入了电气时代 以更简单的操作实现更高的效率,这是我在接触C++一周时的整体印象。
目录
auto关键字
拓展:
auto的使用:
实际引用:
范围for
范围for的使用
范围for的使用条件
空值nullptr(关键字)
auto关键字
拓展:
首先拓展一条知识 :
最简单的例子:
他可以推出来一个变量的类型 ,有什么用? 往下看 》》》
auto的使用:
对于之前auto的用法我们简单了解就好 ,毕竟现在也没法使用了,编译器也不支持了,不再涉及。
auto用于自动推导类型
但是有缺点 》》 会丢失const类型
实际引用:
但是上面的例子 在实际应用中还是比较少的 》》》我能自己输int,那auto有什么用呢?
std::map<std::string, std::string> dict = { { "sort", "排序" }, { "insert", "插入" }
};
//像这种写起来很麻烦的 根据右边的值自动去推导it的类型 就方便了
auto it = dict.begin();
像这种 前面比较麻烦 直接根据右边的值自动推导 这个效率还是比较高的。
范围for
之前在打印数组下标的时候 都要用
int main()
{
int arr[] = { 1,2,3,4,5 };
int sz = sizeof(arr) / sizeof(int);
int i = 0;
for (i = 0; i < sz; i++)
{
cout << arr[i] << endl;//打印数组中的每个元素
}
}
但是C++11标准新添加的范围for极大的提高了这个操作的效率
范围for的使用
C++11中引入了基于范围的for循环。for循环后的括号由冒号“ :”分为两部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围。
举一个和上面相同的例子::
因为有了auto 甚至数组元素的类型都不需要自己填写了
》》》但是也可以写
这个循环也是可以使用break continue的
范围for的使用条件
那么简单 有没有使用条件呢?
迭代范围必须是确定的 比如
》》》
void TestFor(int array[])
{
for(auto& e : array)
cout<< e <<endl;
}
数组传到函数中,意义就变了,for的循环就不确定了 不确定的是不能用的。
空值nullptr(关键字)
诶,我们之前不是有NULL了吗?为什么还要有nullptr
这个是C++11为了弥补C++98和03定义的缺陷
??还有缺陷 ??
在之前版本中 NULL实际是个宏 ,我们来看一下传统C头文件的代码
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
可以看到NULL可能被定义为字面常量0
我们设计实验来验证一下
》》》 》》》
可以看到 f(NULL)被定义成了字面常量0 从而无法达到理想中作为空指针的效果
因此为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr。
到此:初识C++章节正式结束,感谢阅读。