c++:自动获取数据类型,auto与decltype的异同

来源:互联网 发布:淘宝网费列罗巧克力 编辑:程序博客网 时间:2024/05/22 13:06
//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;//doubledecltype(ra) i3 = ra;decltype(12.4l) i4 = a;//long doubledecltype(12.4f) i5 = a;//floatdecltype(12l) i6 = a;//longcout << 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;}

0 0
原创粉丝点击