auto关键字
auto可以自动识别类型,根据右边自动识别类型
警告:
1.auto不能做函数的参数
2.auto不能定义数组
3.auto使用的时候不能独立定义,必须给值
即auto a=2;这样是不合理的
int main() { const int a = 0; int b = 0; //auto自动推导c的类型,什么类型都可以 auto c = &a;//a的类型是int,c就是int* auto d = 'a';//d是char auto k = 1.1; //typeid可以自动打印对象的类型 cout << typeid(c).name() << endl; cout << typeid(d).name() << endl; cout << typeid(k).name() << endl; //实际中我们不会用那样用auto //STL和范围或里面用 //std::map <std::string, std::string> dict = { {"sort","排序"},{"insert","插入"} }; //std::map <std::string, std::string>::iterator it = dict.begin(); //auto it = dict.begin();//自动识别右边的变量,简化前面类型 return 0; }
int main() { const double m = 1.1; int x = 10; auto a = &x;//auto 是int* auto* b = &x;//auto 和auto*都是一样的 auto& d = m;//这个不会识别前面的const,相当于权限的放大,auto只是一个类型 const auto y = x;// auto& c = x;//int,c是x的引用 cout << typeid(a).name() << endl; cout << typeid(b).name() << endl; cout << typeid(d).name() << endl; return 0; }
auto的应用
范围for
int main() { //语法糖,用起来很甜——范围for int array[5] = { 1,2,3,4,5 }; for (int i = 0; i < sizeof(array)/sizeof(int); i++) { cout << array[i] << endl;//遍历数组 } //c++11 for (auto e:array)//自动依次取array数组里面中的每个元素赋值给e,名称是我们随机取的,int也可以 { cout << e << endl; } //范围for,修改把数组中的每个值+1 for (auto e : array) { e++;//这样写不改变里面的每个值 } for (auto& e : array)//e是里面每个值的别名 { e++;//这样就对每个值进行++,e的生命周期是一次循环,加个指针就不行, } //范围for的array必须是数组名,不能是指针,所以不能用传参过去使用 TESTFOR(array); return 0; }
nullptr
因为c++里面NULL既可以代表空指针,也可以代表0,如果传NULL的话就可能有歧义,所以我们就专门用nullptr来代表c++里面的空指针