int x = 2;//x是左值
auto&& x1 = x;// x1类型是int&
auto&& x2 = x;// x2类型是const int&
auto&& x3 = 2;// 2是右值,x3类型是 int&&
const char name[] = "sagaga";// name 类型是const char[7]
auto arr1 = name ;//arr1类型是 const char*
auto& arr2 = name; // arr2 类型是 const char(&) [7]
void someFunc(int, double);
auto fun1 = someFunc; // fun1 类型 void(*)(int,double)
auto& fun2 = someFunc; // fun2 类型 void(&)(int,double)
auto x = {2}; //类型为 std::initializer_list<int> value {2}
auto x {2} ; // 与auto x = 2相同
------------------
显示类型转换比隐式类型转换好
float a = 0.2;
int x = a *100;// 发生隐式类型转换
auto y = static_cast<int>a *100;// 发生显式类型转换