首页 > 编程语言 >【C++】踏上C++学习之旅(五):auto、范围for以及nullptr的精彩时刻(C++11)

【C++】踏上C++学习之旅(五):auto、范围for以及nullptr的精彩时刻(C++11)

时间:2024-11-06 13:19:54浏览次数:3  
标签:11 int auto nullptr C++ 关键字

文章目录


图片

前言

本文我了解一下C++11新特性的auto、范围for以及nullptr给我们的编程带来了什么样的好处,以及我们在特定的场景该如何使用它们。

温馨提示:本文所讲到的C++11(2011年)和C++98(1998年)均为C++编译器的版本。

OK,让我们一起探索这些auto、范围for以及nullptr背后的秘密。

哈哈哈


1. auto关键字(C++11)

这里需要说明的一点是,在C++98就已经有auto这个关键字了。不过在C++98的做法中,它将auto关键字视作一个存储类型的指示符。换句话说,只要是在C++98中使用auto关键字定义的变量就是一个具有自动存储器功能的局部变量 – 待补充

1.1 为什么要有auto关键字

这就要往类型别名的方向去思考这个问题。

想一个现象,随着我们越学到后面,代码就会变得愈加复杂,伴随的是声明类型的长度也会增加,这个就会导致两个问题:

  1. 类型难以拼写;
  2. 类型含义不明确导致出错。

这么说可能有点干巴,下面我来展示一段代码(这个是大家以后学习C++要用到的):

#include<iostream>
#include<string>
#include<map>
#include<vector>
using namespace std;

int main()
{
	std::map<std::string, std::string> m{ {"apple","苹果"},{"orange","橙子"},{"pear","梨"} };

	std::map<std::string, std::string>::iterator it = m.begin();

	while (it != m.end())
	{
		//...
	}
	return 0;
}

上面的std::map<std::string, std::string>std::map<std::string, std::string>::iterator,这两个类型够长吧,即使你能记得住,如果有很多地方都要定义的话,我估计你的键盘可能会敲冒烟。

那有的人就会这么想,那我可以用typedef来给这些长的类型起一个别名,比如下面这样:

#include<iostream>
#include<string>
#include<map>
#include<vector>
using namespace std;
typedef std::map<std::string, std::string>  Map;

int main()
{
	Map m{ {"apple","苹果"},{"orange","橙子"},{"pear","梨"} };

	Map::iterator it = m.begin();

	while (it != m.end())
	{
		//...
	}
	return 0;
}

这个方法确实是可以的,但是你能确保在庞大的代码量面前,你能十分的明确Map这个类型所代表的具体含义吗?本人觉得这是一件很难的事,另外用typedef关键字,还有个重要的细节:

#include<iostream>
using namespace std;

typedef int* int_ptr;
int main()
{
	int num1 = 66,num2 = 88;
	//写法1:
	int_ptr a = &num1 , b = &num2;
	//写法2:
	int_ptr a = &num1 , *b = &num2;
	//以上两种写法那个是正确的?
}

答案:写法一是正确的。

#include<iostream>
using namespace std;

int main()
{
	int num1 = 66,num2 = 88;
	//写法1:
	int* a = &num1 , b = &num2;
	//写法2:
	int* a = &num1 , *b = &num2;
	//以上两种写法那个是正确的?
}

答案:写法二是正确的。

如果你上面两道题目做对了一道的话,那我想auto关键字就很适合你使用了!

1.2 auto关键字的使用方式

标签:11,int,auto,nullptr,C++,关键字
From: https://blog.csdn.net/tianxiawushanu/article/details/143362108

相关文章

  • CF1105
    好想睡觉……A.SalemandSticks原题小链接CF题目大意:给定长度为n的序列a(1<=n<=1000,1<=a[i]<=100),要求给出一个整数t,使得∑max(abs(a[i]-t)-1,0)最小。解题思路:下意识地就开始推,哪怕看到了数据范围还是想着能不能O(n)给解决。但忐忑地翻了下题解后发现这题其实就是一个......
  • 【C/C++】野指针概念以及避免方式
    C语言中的野指针详解野指针(WildPointer)是指向未定义或非法内存位置的指针。本博客讲解野指针的概念、产生原因、危害以及如何避免野指针的问题。1.什么是野指针野指针指的是未初始化或已经失效的指针变量。这些指针指向的内存位置不再有效,可能被系统回收或被其他变量使......
  • CSP/信奥赛C++完整学习规划(价值2万的csp-j完整课程体系)
    CSP/信奥赛C++课程完整学习视频一站式掌握信奥赛知识冲刺信奥赛拿奖课程购买后永久学习,不受限制!阶段一:《信奥赛C++语法基础》课程目标:轻松入门C++语法课程链接:https://edu.csdn.net/course/detail/39557阶段二:《信奥赛C++语法进阶》课程目标:快速进阶C++语法......
  • 【2024-11-04】吃的陷阱
    20:00乐观不等于盲目期待最好的事情发生,而是相信无论发生什么,你都能处理好。                                                 ——马丁·塞利格曼昨晚临睡前我称了一......