C++基础:关键字auto

1.类型推到

C++引入了auto和decltype关键字实现类型推导,通过这两个关键字不仅能方便获取复杂的类型,而且还能简化书写,提高编码效率

C11中auto成为类型指示符

    auto类型推导:auto定义的变量,可以根据初始化的值,在编译时推导出变量名的类型。

如:

C++基础:关键字auto_第1张图片

2. auto的推导规则

从上面的示例中可以看到auto的一些使用方法。它可以同指针、引用结合起来使用,还可以带上cv限定符((修饰词),const和volatil限定符的统称)。 C++基础:关键字auto_第2张图片

由上面的例子可以看出:

    ip和c的推导结果是很显然的,auto在编译时被替换为int,因此,a和c被推导为int*和int&;

    xp的推导结果说明,其实auto不申明为指针,也可以推导出指针类型;

    d的推导结果说明,当表达式是一个引用类型时,auto会把引用类型抛弃,直接推导为int;

     f的结果可以说明:当表达式带有const(实际上Volatile也会得到同样的结果)属性时,auto会把const属性抛弃掉,推导成non-const int 类型;

    g,h的推导说明:当auto和引用(换成指针在这里也将得到同样的结果)结合时,auto的推导将保留表达式的const属性。

通过上面的一系列示例,可以得到下面这两条规则:

   (1)当不申明为指针或者引用时,auto的推导结果和初始化表达式抛弃引用和cv限定符后类型一致;

   (2)当声明为指针或引用时,auto的推导结果将保持初始化表达式的cv属性。

3. auto作为函数的形参类型 C++基础:关键字auto_第3张图片

 C++基础:关键字auto_第4张图片

 4. auto的限制:

C++基础:关键字auto_第5张图片

总结:

1.C11中auto成为类型指示符;

2. auto不能用于函数参数;

3. auto不能用于非静态成员变量;

4. auto无法定义数组;

5. 实例化模板时,不能使用auto作为模板参数。

示例: 

C++基础:关键字auto_第6张图片

  

你可能感兴趣的:(笔记,c++)