传统艺能😎
小编是双非本科大一菜鸟不赘述,欢迎大佬指点江山(QQ:1319365055) 此前博客点我!点我!请搜索博主 【知晓天空之蓝】
🎉🎉非科班转码社区诚邀您入驻🎉🎉 小伙伴们,打码路上一路向北,背后烟火,彼岸之前皆是疾苦 一个人的单打独斗不如一群人的砥砺前行 这是我和梦想合伙人组建的社区,诚邀各位有志之士的加入!! 社区用户好文均加精(“标兵”文章字数2000+加精,“达人”文章字数1500+加精) 直达: 社区链接点我
🎉🎉🎉倾力打造转码社区微信公众号🎉🎉🎉
auto🤔
auto 作为C++里面的关键字,早期 C++98 就有了,当实他的含义是具有自动存储器的局部变量,但唯一的遗憾就是没人去用他,他拥有自动的生命周期,这是多余的,因为就算不使用 auto 声明变量依然有自动的生命期,除非依靠 static 来延长周期。
到了 C++11 中,auto 有了全新的定义:变量的自动推断 。他作为一个全新的类型指示符来指示编译器,声明的变量必须由编译器在编译时推导而得,比如像这样:
int main()
{
int num = 5;
auto a = num;
auto b = 'a';
auto c = test();
}
说到这里我们就可以趁机了解一下 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
- auto 不能拿来作为函数参数,形参设置 auto 时,我们的编译器无法堆实参类型进行推导
- == auto 不能用来声明数组==,为了避免和 C++98 混淆,C++ 只保留了 auto 作为类型指示符的用法
- auto 不能用作缺省参数
空值指针🤔
就是我们的空指针,和之前我们之前空指针类比一下:
int* a = 0;
int* b =NULL;
int* c = nullptr;
我们以后会采取第三种 nullptr 的写法,其实三种的本质是一样的,但是前两种并不规范。还是那句话,C++的修改都是在补C语言的坑,我们的 NULL,0 其实默认的类型是整型的0,nullptr 才是实至名归的 “空指针” 换句话说 C语言 要真正做到空指针只能写成((void*)0)
|