auto类型说明符

来源:互联网 发布:网络直播 无聊 编辑:程序博客网 时间:2024/05/03 05:54

                                                                    C++11新标准引入了auto类型说明符

                                用它能让编译器替我们分析表达式所属的类型 auto让编译器通过初始值来推算出标量的类型。

 

             显然auto定义的变量必须有初始值

             auto item = vall + val2; //item的类型通过val2和val1的相加的结果得出

            使用auto也能在一条语句中声明多个变量 因为一条声明语句只能有一个基本数据类型 所以改语句中所有的变量的初始数据类型都必须是一样的才可以

   复合型 常量和auto

  编译器推断出来的auto类型有时候和初始值的类型并不一样 编译器会适当的地改变类型使其更符合初始化的规则

(1)首先 使用引用其实是使用的引用的对象,特别是当引用被当做初始值时,真正参与初始化的其实是引用对象的值。

此时编译器以引用对象的类型来作为auto的类型:

                          int i = 0,&r = i;

                          auto a = r;  // a是一个整数的类型(r是i的别名,而i是一个整数类型

(2)其次 auto一般会忽视掉顶层的const,同时顶层的const側会保留下来,比如当初始值是一个指向常量的指针的时候

     const int ci = i, &cr = ci;

     auto b = ci; // b是一个整数(ci的顶层const特性被忽略掉了)

     auto c = cr; //c是一个整数(cr是ci的别名,ci本身是一个顶层const)

     auto d = &i; // d是一个整数指针(整数的地址就是指向整数的指针)

     auto e = &ci;// e是一个指向整数常量的指针(对常量对象取地址是一种底层const)

 

 如果希望推断出来的auto类型是一个顶层的const,需要明确的指出

    const auto f = ci; //ci的推算类型是int,f 是const int;

 

(3)可以将引用设为auto,此时原来的初始化规则任然实用

    auto & g = ci; // g是一个整数常量引用 绑定到ci

    auto & h = 42; //错误: 不能为非常量引用绑定字面量

    const auto & j = 42; //正确 可以为常量引用绑定字面量

 

 设置一个类型为auto的引用时 初始值中的顶层常量属性仍然保留。

 

  要在一条语句中定义读个变量 切记 符号&和* 只从属某个声明符号 而非基本数据类型的一部分 因此初始值必须是同一种类型

 

     auto k = ci, &l = i; //k是整数,l是整数的引用

     auto &m = ci, *p = &ci; //m是对整形常量的引用 p是指向整形常量的指针

     auto &n = i,*p = &ci;

  // n是整数类型 p是指向常量整数的指针 数据类型不一样  一个是int 一个是const int 所以错误

 

 

 

 

 

0 0