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++里面的空指针