c++ decltype和auto对比学习
1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 8 int a=1; 9 int b=2; 10 int &ra = a; 11 int *ptr = &a; 12 /* 13 *1.decltype对于括号和解引用操作符*,会解析为引用& 14 *int &ra = a; 15 *decltype(ra) da; //int & 16 *decltype(a) db; //int 17 *decltype((a)) dc;//int &,必须初始化,否则报错 18 */ 19 // decltype(ra) refa; //int &,error:reference must initialized 20 decltype(a) testb; //int 21 // decltype((a)) refb; //int &,error:reference must initialized 22 // decltype(*ptr) refc;//int &,error:reference must initialized 23 24 /* 25 *2.decltype和auto对于const的处理对比 26 *decltype 保留底层const和顶层const 27 *auto只保留底层const 28 *auto不得不保留底层const是因为从底层const常量转换为没有底层const的变量是错误的 29 *const int *cpa = &i; 30 *auto a = cpa; //a是const int * 31 */ 32 //顶层const,decltype保留,auto忽略 33 const int cona = 1; 34 decltype(cona) td = 1; // const int 35 auto hd = cona; //int 36 hd = 1; //ok 37 // td = 1; //error:const int read-only 38 39 //底层const,decltype保留,auto保留 40 const int *conb = &a; 41 decltype(conb) te = &a;//const int * 42 // *te = 2; //error:const int * read-only locatin 43 auto fe = conb; //const int * 44 // *fe = 3; //error:assignment of read-only location 45 46 //底层和顶层const 47 const int * const conc = &a; 48 decltype(conc) tf = &a; //const int * const 49 //tf = &b; //error:assignment of read-only variable 50 //*tf = 3; //error:assignment of read-only location 51 auto ft = conc; //const int * 52 ft = &b; //ok 53 // *ft = 4; //error:assignment of read-only location 54 return 0; 55 }
posted on 2018-04-19 11:06 CreatorKou 阅读(132) 评论(0) 编辑 收藏 举报