小编是双非本科大一菜鸟不赘述,欢迎大佬指点江山(QQ:1319365055)
此前博客点我!点我!请搜索博主 【知晓天空之蓝】
非科班转码社区诚邀您入驻
小伙伴们,打码路上一路向北,背后烟火,彼岸之前皆是疾苦
一个人的单打独斗不如一群人的砥砺前行
这是我和梦想合伙人组建的社区,诚邀各位有志之士的加入!!
社区用户好文均加精(“标兵”文章字数2000+加精,“达人”文章字数1500+加精)
直达: 社区链接点我
倾力打造转码社区微信公众号
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 是完全没有意义的,他真正的价值体现在我们以后的场景,在学习 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
就是我们的空指针,和之前我们之前空指针类比一下:
int* a = 0;
int* b =NULL;
int* c = nullptr;
我们以后会采取第三种 nullptr 的写法,其实三种的本质是一样的,但是前两种并不规范。还是那句话,C++的修改都是在补C语言的坑,我们的 NULL,0 其实默认的类型是整型的0,nullptr 才是实至名归的 “空指针”
换句话说 C语言 要真正做到空指针只能写成((void*)0)