tag 标签: 变量别名

相关博文
  • 热度 10
    2016-3-15 21:03
    1052 次阅读|
    0 个评论
    变量别名 ---------------- 变量别名可以使用typedef: typedef double wages; 也可以使用using: using SI = Sales_item; 变量别名和const结合,会产生有趣的结果: typedef char *pstring; const pstring cstr = 0; cstr是指向char类型的常量指针,因为const要和base type结合。 这里,对象可以被更改,但cstr不可被更改。 typedef不是define,不能直接替代变量的内容。 auto ---------------- 如果不能确定变量的类型,可以使用auto关键字,让编译器来确定。 因此被auto修饰的变量必须要被初始化: auto item = val1 + val2; 此处,item可能是int、double、char或者类名。 auto会舍弃top-level的const,保留low-level的const。 就是说通过auto产生的变量,本身一般不是被const修饰的,除非指定它为const: const auto f = ci; 关于auto、引用和指针的结合使用,还需要根据实际情况多加练习。 decltype ---------------- 有时候,我们需要让编译器根据表达式来确定数据类型,但又不初始化这个变量。 这个时候就可以使用decltype关键字: decltype(f()) sum = x; 函数f()并不会被调用,但是它的返回值类型会在这里被使用。 decltype不同于auto,它会完整的保留const。 int i = 42, *p = i, r = i; decltype(r + 0) b; decltype(*p) c; decltype(r)是一个引用类型,而decltype(r + 0)是一个int类型。 decltype(*p)表示返回的将是一个引用,即int。 还需要注意括号的使用: decltype((i)) d; // 错误的表达,d是int,必须被初始化。 decltype(i) e;   // 正确的表达,e是int。 不加括号,返回的是变量类型; 加了括号,返回的是表达式,赋值表达式会产生一个“=”左边的类型的引用。 这点对于理解((i))非常关键。