C++初阶语法——类型指示符auto和空指针nullptr

news2025/2/25 2:23:44

前言:本篇文章的重点
1.C++中的类型指示符auto
2.借由auto实现的范围for
3.C++为什么要创建nullptr而不是用原本的NULL。

目录

  • 一.auto
    • 1.auto的含义及使用
    • 2.auto使用注意事项
    • 3.范围for(重头戏)
      • 范围for注意事项
  • 二.nullptr

一.auto

1.auto的含义及使用

在C++11中,标准委员会赋予了auto的含义为:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时推导而得到。

#include<iostream>
using namespace std;

int main()
{
	int a = 10;
	auto b = 20;  
	auto c = 'x';
	auto d = 1.1;
	//typeid(变量名).name()能够显示变量的类型
	cout << typeid(a).name() << endl;    
	cout << typeid(b).name() << endl;
	cout << typeid(c).name() << endl;
	cout << typeid(d).name() << endl;//auto e;  错误示范,auto变量必须在定义时初始化
	return 0;
}

这里是引用
注意:使用auto定义变量时必须初始化,因为编译阶段编译器需要根据初始化表达式来推导auto的实际类型,因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译阶段会将auto替换为变量实际的类型。

2.auto使用注意事项

1.定义变量时必须初始化,这点在上面提到过了。

2.定义一行时,数据必须是同一种类型。
在这里插入图片描述

3 .auto不能作为函数的参数
这点跟第一点有关系,因为参数没有初始化。
在这里插入图片描述

4.auto不能直接用来声明数组
在这里插入图片描述

3.范围for(重头戏)

C语言中的for循环遍历在C++中有着更为便捷的方式——范围for,使用起来非常方便。

int main()
{
	int arr1[] = { 1,2,3 };
	//C语言写法
	for (int i = 0; i < sizeof(arr1) / sizeof(int); i++)
	{
		cout << arr1[i] << " ";
	}
	cout << endl;
	//C++写法
	//1.依次取arr1中数据赋值给x
	//2.自动判定结束
	//3.自动迭代
	for (auto x: arr1)
	{
		cout << x << " ";
	}
	return 0;
}

范围for注意事项

仍以上述代码为例,各位觉得下面代码运行后显示的是什么?

int main()
{
	int arr1[] = { 1,2,3 };
	for (auto x: arr1)
	{
		x = x*2;
	}
	for (auto x : arr1)
	{
		cout << x << " ";
	}
	return 0;
}

运行结果如下,可以看到数据并没有*2,这是因为上述代码只是依次取arr1中数据赋值给x,x的改变并不会影响数组中的数据。
这里是引用

那么若是想改变该怎么办呢?
答:可以使用引用, auto后加上&,代表x是数组中数据的别名,这样改变x就会改变数组中的数据
但是不能使用指针,因为指针类型与原数据类型不匹配。
这种时候就可以看到C++使用引用的高明之处了。

int main()
{
	int arr1[] = { 1,2,3 };
	for (auto& x: arr1)  //auto后加上&,代表x是数组中数据的别名,这样改变x就会改变数组中的数据
	{
		x = x*2;
	}
	/*for (auto* x : arr1) //auto* 类型与arr1数据类型(int)不匹配
	{
		x = x * 2;
	}*/
	for (auto x : arr1)
	{
		cout << x << " ";
	}
	return 0;
}

二.nullptr

前面的几篇文章提到过C语言中的漏洞很多,nullptr就是为了弥补NULL的不足而诞生的。
下例通过函数重载构建func函数,各位觉得显示的是什么?
按照我们设计代码的初衷,Func(0)应该打印int,而Func(NULL)应该打印int*。

void Func(int x)
{
	cout << "int" << endl;
}
void Func(int* x)
{
	cout << "int*" << endl;
}
int main()
{
	Func(0);
	Func(NULL);
	Func(nullptr);
}

运行结果如下:
在这里插入图片描述
可以发现Func(NULL)调用的是第一个函数,与预期结果不同。
这是因为在C语言中有个一个宏定义#define NULL 0,NULL被定义为字面常量0。
因此为了代码的健壮性,C++后来创建了nullptr。

文末BB:对哪里有问题的朋友,尽管在评论区留言,若哪里写的有问题,也欢迎朋友们在评论区指出,博主看到后会第一时间确定修改。最后,制作不易,如果对朋友们有帮助的话,希望能给博主点点赞和关注.
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/863213.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目经理必备:常用的项目管理系统推荐!

当我们成为项目负责人时&#xff0c;找到合适的工具来管理跟进项目&#xff0c;就成为了迫切需要解决的问题。一款优秀的工具&#xff0c;在项目的管理跟进中&#xff0c;起着极为重要的作用&#xff0c;一般可以付费购买专门的项目管理软件。 1.可快速切换查看不同角度的项目信…

nacos安装与启动相关问题(启动闪退和显示此站点的连接不安全)

问题&#xff1a;启动闪退 尝试&#xff1a; 使用记事本打开cmd文件&#xff0c;在文件结尾处新增两行 pause endlocal 如果还有问题&#xff1a;ERROR Nacos failed to start, please see D:\dev\nacos\logs\nacos.log for more details 尝试&#xff1a; 在nacos的bin目…

百度刘林:渗透深层企业经营 AIGC将为千行百业带来变革机会

近年来人工智能领域迅猛发展&#xff0c;随着AIGC概念的走红&#xff0c;生成式大模型技术领域硕果累累&#xff0c;尤其在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;生成式AI的大语言模型实现了理解人类意图的技术跨越。 值此行业变革的关键节点&#xff0c;深…

css3 瀑布流布局遇见截断下一列展示后半截现象

css3 瀑布流布局遇见截断下一列展示后半截现象 注&#xff1a;css3实现瀑布流布局简直不要太香&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e; 场景-在uniapp项目中 当瀑布流布局column-grap:10px 相邻两列之间的间隙为10px&#xff0c;column-count:2,2列展…

mysql数据库修改权限

1、找到mysql数据库下面的user表&#xff0c;将Host改为“ % ” 2、新建查询输入“FLUSH PRIVILEGES”语句&#xff0c;运行&#xff0c;更新权限

重磅!法大大上榜《可信企业级SaaS产品能力生态目录(2023)》

近日&#xff0c;中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;正式公布了《可信企业级SaaS产品能力生态目录&#xff08;2023&#xff09;》&#xff0c;法大大作为电子签行业领军企业荣誉上榜。 据悉&#xff0c;该目录的编制是中国信通院为了解决我国当…

深兰科技熊猫汽车牵手首恒出行,人工智能技术提升商用车运营服务

8月8日&#xff0c;深兰科技集团旗下熊猫新能源汽车(上海)有限公司(下称熊猫新能源汽车)与河南首恒出行服务有限公司(下称首恒出行)在深兰科技总部举行签约仪式&#xff0c;首恒出行将向熊猫新能源汽车年定向采购10000台商用车&#xff0c;双方将在汽车后市场领域进行技术合作。…

有人真的会去分析代码吗

很早之前使用 webpack 的时候&#xff0c;也有类似的插件&#xff0c;分析打包出来之后的代码&#xff0c;分别是哪些模块比较庞大&#xff0c;针对打包的内容进行优化。说实话&#xff0c;知道归知道&#xff0c;但是没有哪个项目使用分析过。最近刚好看见了两个插件&#xff…

golang协程池库tunny实践

前言 线程池大家都听过&#xff0c;其主要解决的是线程频繁创建销毁带来的性能影响&#xff0c;控制线程数量。 go协程理论上支持百万协程并发&#xff0c;协程创建调度的消耗极低&#xff0c;但毕竟也是消耗对吧。 而且协程池可以做一些额外的功能&#xff0c;比如限制并发&…

const易错详解

const对比 常量指针 int b; (1)const int *a &b;//常量指针(2)int const *a &b; //常量指针常量指针&#xff1a;指向的变量值不能被修改 ![常量指针](https://img-blog.csdnimg.cn/9d795b11eb6d484297ea7cbead28463f.png 指针常量 int b; int* const a&b;…

CMU 15-445 -- Distributed OLTP Databases -20

CMU 15-445 -- Distributed OLTP Databases -20 引言AssumptionAgendaAtomic Commit ProtocolsTwo-Phase Commit (2PC)2PC Success2PC Abort2PC OptimizationsFault Tolerant PaxosMulti-Paxos 2PC vs. Paxos ReplicationReplication ConfigurationApproach #1: Master-Replica…

自动装配在Spring Boot中的重要性及实现方式

这里写目录标题 自动装配在Spring Boot中的重要性及实现方式什么是自动装配&#xff1f;如何实现自动装配&#xff1f;如何使用自动装配自动装配的优势总结 手写自动装配的Java代码示例原理 自动装配在Spring Boot中的重要性及实现方式 Spring Boot是基于Spring框架的开源框架…

腾讯云服务器CVM实例族有什么区别?怎么选?

腾讯云服务器CVM有多种实例族&#xff0c;如标准型S6、标准型S5、SA3实例、高IO型、内存、计算型及GPU型实例等&#xff0c;如何选择云服务器CVM实例规格呢&#xff1f;腾讯云服务器网建议根据实际使用场景选择云服务器CVM规格&#xff0c;例如Web网站应用可以选择标准型S5或S6…

Netty宝典

文章目录 一.NIO1.简介2.缓冲区(Buffer)3.通道(Channel)4.选择器(Selector)5.原理6.SelectionKey7.ServerSocketChannel 和 SocketChannel8.Socket 二.线程模型1.传统阻塞 I/O 服务模型2.Reactor 模式3.单 Reactor 单线程4.单Reactor多线程5.主从 Reactor 多线程 三.Netty模型1…

无法坚持运动?解密肠道菌群影响运动积极性

谷禾健康 运动可以说是最有效和可行的生活方式因素&#xff0c;个人可以利用它来保护自己免受各种疾病的侵害&#xff0c;包括代谢性、心血管、神经退行性和肿瘤性疾病。 世界卫生组织建议&#xff0c;每周进行150-300分钟的中等强度运动。 运动的好处具体不用多说了&#xff0…

什么是智慧工地和智慧工地源码?

智慧工地将更多人工智能、传感技术、虚拟现实等高科技技术植入到建筑、机械、人员穿戴设施、场地进出关口等各类物体中&#xff0c;并且被普遍互联&#xff0c;形成“物联网”&#xff0c;再与“互联网”整合在一起&#xff0c;实现工程管理干系人与工程施工现场的整合。智慧工…

相关C语言易错点

四区 我们想来介绍一下内存四区 栈区 局部变量&#xff0c;局部常量 空间自动开辟和释放&#xff0c;只能作用于局部&#xff0c;函数不能返回局部变量的空间地址 堆区 malloc,realloc,free 手动开辟&#xff0c;手动释放&#xff0c;如果不手动释放&#xff0c;那么会在程…

广州华锐视点:电力行业全场景数字孪生系统帮助企业轻松掌握复杂信息

电力行业全场景数字孪生系统是一种基于虚拟现实技术的数字化展示平台&#xff0c;可以模拟电厂的运行状态和设备状况&#xff0c;提供实时的数据监测和分析功能。这种平台对管理者有很多帮助&#xff0c;以下是一些主要的方面&#xff1a; 首先&#xff0c;数字孪生云展示平台可…

YOLOV7改进:更换为MPDIOU,实现有效涨点

1.该文章属于YOLOV5/YOLOV7/YOLOV8改进专栏,包含大量的改进方式,主要以2023年的最新文章和2022年的文章提出改进方式。 2.提供更加详细的改进方法,如将注意力机制添加到网络的不同位置,便于做实验,也可以当做论文的创新点。 2.涨点效果:更换为MPDIOU,实现有效涨点! 目录…

Snapclear for mac图像背景删除软件

Snapclear使用先进的算法和人工智能技术&#xff0c;能够快速而准确地分离图像中的主题和背景。它可以自动识别边缘和细节&#xff0c;并生成平滑而清晰的抠图结果。 Snapclear Mac版下载-Snapclear for mac(图像背景删除软件)- Mac下载 功能 人工智能驱动。 精确的切片 100%…