初识C++(五)

news/2024/9/3 0:30:28 标签: c++, 开发语言

简述:初识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++章节正式结束,感谢阅读。


http://www.niftyadmin.cn/n/4629.html

相关文章

HTTP 协议的基本格式和 fiddler 的简单使用

荔枝1.HTTP基本介绍2.协议格式fiddler下载与使用请求响应1.HTTP基本介绍 HTTP协议&#xff0c;又称超文本传输协议&#xff0c;在应用层协议中使用非常广泛。 TCP/IP模型可见博客 我用#CSDN#这个app发现了有技术含量的博客&#xff0c;小伙伴们求同去《每天一个小细节&#xf…

mac支持的硬盘格式 什么硬盘格式是mac和win支持的

大部分硬盘在默认出厂前都会设定好一个固定的磁盘格式&#xff0c;如果该格式与用户电脑所使用的系统不兼容&#xff0c;就无法正确地进行硬盘读写甚至硬盘识别。对于Mac系统和Windows系统而言&#xff0c;它们都有自己支持的某些硬盘格式。什么是Mac支持的硬盘格式&#xff0c…

基于三段式命令及筛选器的rbac权限控制方案

引用自 摸鱼wiki 1. 权限命令的表示 1.1 权限命令 采用三段式设计&#xff0c;将命令划分为类型、操作、属性/对象三个层级。相较于采用常量声明&#xff0c;这样的写法可以支持使用通配符进行设置&#xff0c;减少调用时的代码量。 // 常量 File_Add File_Delete File_Swit…

Ubuntu安装grafana并配置influxdb数据源

Ubuntu安装grafana并配置influxdb数据源显示。 第一种方法&#xff1a; 1、ubuntu安装 apt-get install grafana 启动、重启、状态 sudo systemctl start grafana-server sudo systemctl restart grafana-server sudo systemctl status grafana-server 默认端口是3000&…

为什么很多新型编程语言都抛弃了 C 语言风格的 for 语句?

因为C风格的for循环有太多不确定的地方&#xff0c;这些东西都非常的不直观&#xff1a; 典型的C风格的for循环像这样&#xff1a; for( initialize; condition; increment )statement( block); 那么存在这么一大堆问题&#xff1a; initialize声明的变量可见性范围是&…

面试不面试,你都必须得掌握的vue知识

前言 最近抽空整理了下我对vue2.x的理解和认知&#xff0c;涵盖了vue2.x的常用知识、冷知识以及一些底层原理&#xff0c;算是我的vue2世界观。由于文章比较长&#xff0c;大家可以酌情根据自身需求选读&#xff0c;相信各位耐心看完定会有所收获。 因为是自己的理解&#xf…

二分查找的模板

这篇博客的二分用的都是左闭右闭的区间&#xff0c;对于二分来说还是我还是习惯这样写 最传统的二分查找&#xff0c;用左闭右闭写 int search(vector<int>& nums, int target) {int left 0;int right nums.size() - 1; // 定义target在左闭右闭的区间里&#xff0…

《论文写作》感悟

前言 这篇文章是在听完闵老师的《论文写作》课程后的一些个人感悟&#xff0c;俗话说&#xff0c;好记性不如烂笔头&#xff0c;所以记下这些方便自己后期写论文时复习。 心得体会 应当了解学术论文的格式与结构&#xff0c;写作时应当使用合适且规范的模板。每种期刊都会提…