美文网首页
auto类型推断

auto类型推断

作者: 九楼记 | 来源:发表于2022-03-19 23:51 被阅读0次

    都是自己选择的语言,一条道走到黑。

    被问到这样的一个问题😂。

    在C++11中,支持统一初始化(uniform initialization):

    auto x1 = 27;
     auto x2(27);
     auto x3 = {27};
     auto x4{27}; 
    

    上面的四句话都能编译通过,但并没有和原来的四种形式意义完全一致。前面两个是一样的,后面两句话声明的变量类型是std::initializer_list,其中包含了单个元素,值为27。

     auto x1 = 27; //x1为int,值为27
     auto x2(27);//同上
     auto x3 = {27};//x3为 std::initializer_list<int>,值为{27}
     auto x4{27}; //同上
    

    这里就用到了一个对于auto的特殊类型推断规则:当用大括号括起来的值对auto变量进行初始化的时候(叫做统一初始化式),变量类型会被推断为 std::initializer_list。如果不能够推断成此类型(比如,大括号中的值不是同一类型),编译会出错:

    auto x5 = { 1, 2, 3.0 }; // error! 类型不一致,不能将推断为std::initializer_list<T>
    

    这里会发生两种类型推断,一种是将统一初始化式推断为std::initializer_list ,而std::initializer_list本身也是一个类型为T的模板,因此会根据统一初始化式中的实参对T进行模板类型推断,这是第二种类型推断。上面的类型推断会失败是因为第二种类型推断会失败。

    reference

    [1] https://www.cnblogs.com/harlanc/p/10628321.html
    [2] https://developer.aliyun.com/article/696066

    相关文章

      网友评论

          本文标题:auto类型推断

          本文链接:https://www.haomeiwen.com/subject/uzfodrtx.html