//decltype、auto 自动推理数据类型
//auto 无法区分是否是引用 是否是常量还是变量
//decltype 基本数据类型是一定可以区分的,可以获取常量属性 可是识别引用
//typeid只能获取基本数据类型 不能获取引用以及常量
auto main()->int
{
const vector<int>myint{ 1, 2, 3, 4, 5, 7, 8 };
//myint[0] = 1223;//error 常量,不允许被修改
auto inta = myint[0];
cout << typeid(inta).name() << endl;//auto获取数据的类型 无法获取数据的属性
decltype(myint[0]) intd = 1;//根据myint推理出intd的类型
cout << typeid(myint).name() << endl;
cout << typeid(intd).name() << endl;
cout << typeid(myint[0]).name() << endl;
inta = 88;
const double db(10.8);
const double &rdb(db);
cout << typeid(inta).name() << endl;
cout << typeid(db).name() << endl;
cout << typeid(rdb).name() << endl;
struct mys//结构体
{
decltype(rdb) r1;//如果是引用将占4字节 否则占8字节
//auto inta = myint[0];//auto不能在结构体内部
};
cout << sizeof(mys) << endl;
cin.get();
return 0;
}
//auto 无法区分是否是引用 是否是常量还是变量
void main2()
{
int a = 10;
int &ra(a);
auto i1 = 30;
auto i2 = a;//无法区分 i1 i2是否是常量还是变量
auto i3 = ra;
cout << typeid(i1).name() << endl;
cout << typeid(i2).name() << endl;
cout << typeid(i3).name() << endl;
cin.get();
}
//decltype可获取常量属性以及引用属性 无法区分是否是引用 是否是常量还是变量
void main3()
{
int a = 10;
int &ra(a);
decltype(a) i1 = 123;
decltype(12.4) i2 = a;//double
decltype(ra) i3 = ra;
decltype(12.4l) i4 = a;//long double
decltype(12.4f) i5 = a;//float
decltype(12l) i6 = a;//long
cout << typeid(i1).name() << endl;
cout << typeid(i2).name() << endl;
cout << typeid(i3).name() << endl;
cout << typeid(ra).name() << endl;
cout << typeid(i4).name() << endl;
cout << typeid(i5).name() << endl;
cout << typeid(i6).name() << endl;
cin.get();
}
auto main()->int
{
const double db = 12.0;
const double &rdb(db);
struct mystruct
{
//auto a;//error 结构体中不能使用auto
};
auto dbx = rdb;
dbx = 99.88;
cout << db << endl;//auto、typeid 无法区别常量、变量以及引用
cout << dbx << endl;
cin.get();
return 0;
}
更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。
关于公众号的描述访问如下链接