C++ Primer学习笔记 - 11 - 处理类型

文章目录

  • 2.5.1 类型别名
    • 主要概念
  • 2.5.2 auto类型说明符
    • 主要概念
    • 练习
  • 2.5.3 decltype类型指示符
    • 主要概念
    • 练习

2.5.1 类型别名

主要概念

  1. typedef可以用于定义类型别名:typedef double wages;
  2. using也可以用于定义别名:using SI = Sales_item;
  3. 类型别名和类型名字行等价。
  4. 使用复合类型或常量时要特别注意意外情况。

2.5.2 auto类型说明符

主要概念

  1. auto类型说明符使用时,编译器将通过语义推断变量类型。
  2. auto一般会忽略顶层const。

练习

  1. 练习2.33 利用本节定义的变量,判断下列语句的运行结果。
  2. 练习2.34 基于上一个练习中的变量和语句编写一段程序 ,输出赋值前后 变量的内容 。
    auto i = 0, &r = i;
    auto a = r;
    const int ci = i, &cr = ci;
    auto b = ci;
    auto c = cr;
    auto d = &i;
    auto e = &ci;
    const auto f = ci;
    auto &g = ci;
    //auto &h = 42; //错误定义
    const auto &j = 42;
    auto k = ci, &l = i;
    auto &m = ci, *p = &ci;
    //auto &n = i , *p2 = &ci;
    a= 42; // a是int型,正常运行 
    b = 42; // 忽略顶层const,b是int型,正常运行
    c = 42; //c和b是类型一样,正常运行
    d = 42;// d是指向int型的指针,除了0之外无法使用int值给它赋值
    e = 0; //e是指向const int型的指针 ,除了0之外无法使用int值给它赋值
    g = 43;//g是const int的引用,无法赋值
  1. 练习2.35 判断下列定义推断出的类型是什么,然后编写程序进行验证
const int i = 42;
auto j = i; //j是int型
const auto &k = i;// k是const int的引用 
auto *p = &i;//p是const int 型的指针
const auto j2 = i,&k2 = i; //j2是const int型的变量,k2是const int 型的引用。

2.5.3 decltype类型指示符

主要概念

  1. decltype类型指示符可以通过给定的表达式选择并返回操作数的类型,基本模式:decltype(f()) sum = x;
  2. decltype中的表达式如果是变量,那么返回该变量的类型,包括const。
  3. decltype中的表达式如果是个表达式,那么返回该表达式计算结果的类型。
  4. decltype中的表达式如果加上了括号,那么结果必然是一个引用,引用的类型根据表达式的结果进行判定。

练习

  1. 练习 2.36:关于下面的代码,请指出每一个变量的类型以及程序结束时它们各自的值 。
    int a = 3,b = 4;
    decltype(a) c = a;//c是跟a相同类型的Int
    decltype((b)) d = a;//d是对int型的引用,此处引用了a
    ++c ; //c = 3+1 = 4
    ++d;// d = a =3+1 = 4;
  1. 练习2.37 赋值是会产生引用 的一类典型表达 式,引用的类型就是左值 的类型。也就是说,如果i是int,则表达式i = x的类型是int&。根据这一特点 ,请指出下面代码中每一个变量的类型和值 。
int a = 3,b = 4;
decltype(a) c = a; //int型
decltype(a = b) d = a;//int&型
  1. 练习2.38:说明由decltype指定类型和由auto指定类型有何区别。

答:

  1. 对顶部const的处理存在区别,decltype会完全继承表达式的类型
  2. decltype只是使用了一下输入的表达式的类型,并不会对它的值进行定义,换句话说,可以仅声明,而不初始化,例如这样的代码是可以的int a = 3; extern decltype((a)) k;

你可能感兴趣的:(C++,Primer,学习笔记,C++,Primer,auto,decltype)