auto关键字与空值指针——十分钟手撕C++基础

目录

    • 传统艺能
    • auto
    • 价值
    • 空值指针

传统艺能

小编是双非本科大一菜鸟不赘述,欢迎大佬指点江山(QQ:1319365055)
此前博客点我!点我!请搜索博主 【知晓天空之蓝】

非科班转码社区诚邀您入驻
小伙伴们,打码路上一路向北,背后烟火,彼岸之前皆是疾苦
一个人的单打独斗不如一群人的砥砺前行
这是我和梦想合伙人组建的社区,诚邀各位有志之士的加入!!
社区用户好文均加精(“标兵”文章字数2000+加精,“达人”文章字数1500+加精)
直达: 社区链接点我

倾力打造转码社区微信公众号
在这里插入图片描述


在这里插入图片描述

auto

auto 作为C++里面的关键字,早期 C++98 就有了,当实他的含义是具有自动存储器的局部变量,但唯一的遗憾就是没人去用他,他拥有自动的生命周期,这是多余的,因为就算不使用 auto 声明变量依然有自动的生命期,除非依靠 static 来延长周期。

到了 C++11 中,auto 有了全新的定义:变量的自动推断 。他作为一个全新的类型指示符来指示编译器,声明的变量必须由编译器在编译时推导而得,比如像这样:

int main()
{
int num = 5;
auto a = num;//a为int类型
auto b = 'a';//b为char类型
auto c = test();//c为函数返回值类型
}

说到这里我们就可以趁机了解一下 C++ 的一个运算符:typeid ,使用格式是 typeid(变量名).name()

typeid 的作用是查看变量的类型,比如上面的三个变量我们拿来试一试

	cout << typeid(a).name() << endl;
	cout << typeid(b).name() << endl;
	cout << typeid(c).name() << endl;

auto关键字与空值指针——十分钟手撕C++基础_第1张图片

价值

像上面那样用 auto 是完全没有意义的,他真正的价值体现在我们以后的场景,在学习 STL 库时会接触到两个容器,其实就是数据结构,他们是 map 和 string,咱先放出来大家体会一下:

std::mapstd::string,std::string::iterator it = dict.begin();
auto it = dict.begin();

总的来说,精髓就俩字:偷懒!

auto 第二个应用就是 范围for,C语言里面我们如果要遍历一个数组得这样:

int arr[]={1,2,3};
for(int i =0;i<sizeof(arr)/sizeof(int);i++)

现在C++只需要 auto 就行了,其原理就是 auto 依次自动获取 arr 中的数据,赋值给 e ,自动判断结束

    int arr[]={1,2,3};
	for (auto e : arr)

但是这也只是表面上在遍历,如果我需要对遍历到的元素进行操作,就不能直接拷贝,自然又会用到我们的引用:

int arr[]={1,2,3};
for(auto& e:arr)
{
 e *= 2;
}

但是注意 ,不是哪里都可以玩 auto

  1. auto 不能拿来作为函数参数,形参设置 auto 时,我们的编译器无法堆实参类型进行推导
  2. == auto 不能用来声明数组==,为了避免和 C++98 混淆,C++ 只保留了 auto 作为类型指示符的用法
  3. auto 不能用作缺省参数

空值指针

就是我们的空指针,和之前我们之前空指针类比一下:

int* a = 0;
int* b =NULL;
int* c = nullptr;

我们以后会采取第三种 nullptr 的写法,其实三种的本质是一样的,但是前两种并不规范。还是那句话,C++的修改都是在补C语言的坑,我们的 NULL,0 其实默认的类型是整型的0,nullptr 才是实至名归的 “空指针”
auto关键字与空值指针——十分钟手撕C++基础_第2张图片
换句话说 C语言 要真正做到空指针只能写成((void*)0)

你可能感兴趣的:(C++,c++,开发语言,关键字,指针)