【C++】auto关键字(c++11)、指针空值(c++11)

目录

一、auto关键字

1.1  auto关键字的实际应用

简化代码

范围for

注意点一:

注意点二:

注意点三:

指针空值(nullptr)

NULL的源码:

NULL的使用局限:

注意:


一、auto关键字

在C++11中,标准委员会赋予了auto全新的含义:即auto不再是一个存储类型指示符,而是作为一个新的类型。

1.1  auto关键字的实际应用

其实,用自己的话来理解就是auto是使用在一个类型名很长的时候,用利用编译器自动识别它,简化我们代码量。

场景1:

简化代码

#include <iostream>
#include <map>
#include <string>

using namespace std;

int main() {


	int x = 0;
	auto y = x;//auto自动识别y是int类型
	auto z = &x;//auto自动识别z是指针类型

	cout << typeid(y).name() << endl;//typeid(y).name()是用来看变量y的类型的
	cout << typeid(z).name() << endl;

	//auto在类型名很长时,可以用来简化代码,让编译器自动识别。
	map<string, string>dict;
	//map<string, string>::iterator dit = dict.begin();
	auto dit = dict.begin();//以上auto dit 就自动识别了dit的类型是 map<string, string>::iterator 
	                        //这样看来,的确是简化了代码量吧



	return 0;
}

场景2

范围for

注意点一:

其在使用范围for时对其数据进行改变时,不会影响到原数据。

若想让原数据改变,只需要在auto传参时传引用即可。

代码如下:

for (auto& x : arr) {//如果这里没用使用引用,则不会对原数据有影响。
		
		x *= 3;

		cout << x << " ";
	}

	cout << endl;

注意点二:

auto不能做函数的参数

注意点三:

auto不能直接用来声明数组


指针空值(nullptr)

在编程中,我们在声明一个变量的时候,最好同时给该变量一个合适的初始值,否则可能会出现一些奇奇怪怪的错误。比如,一个未初始化的指针,我们在C中通常会这么对其进行初始化:

int * ptr1 = NULL;

如果你使用的是VsCode编译器,可以点击左键选中NULL,然后点击右键,有个转到定义的选项,点击后可以看到如下代码:

NULL的源码:

由以上可以很清晰的看到,NULL被定义为字面常量 0,或者被定义为无类型指针(void*)常量。

但是,这种定义方法是C98的,我们日常在使用时,不可避免的会遇到一些麻烦。

如下:

NULL的使用局限:

   在main中调用函数Fuc(NULL)时,我们本想调用的函数为Fuc(int *),但由于NULL默认情况下被看成一个整形常量,它就会调用Fuc(int)函数。

而使用nullptr则不会产生这样问题了。

注意,这里定义的Fuc()函数使用了C++中的函数重定义,C语言是无法这样编译的噢!

注意:

1.在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入的
2.在C++11中,sizeof(nullptr) 与sizeof((void*)0)所占的字节数相同。


3.为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值