美文网首页
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类型推断

    都是自己选择的语言,一条道走到黑。 被问到这样的一个问题?。 在C++11中,支持统一初始化(uniform in...

  • 【Effective Modern C++(1)】类型推断

    01 理解模板类型推断 模板类型推断是auto的基础,但部分特殊情况下模板推断的机制不适用于auto 模板的形式可...

  • 【Effective Modern C++】索引

    本书讲述了C++11/14新特性的用法和原理。1. 类型推断01 理解模板类型推断02 理解auto类型推断03 ...

  • C++11带来的优雅语法

    自动类型推导 auto auto的自动类型推导,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推...

  • auto类型推导与const

    auto类型推导规则 C++11中新增了使用auto进行自动类型推断的功能,从此使用容器等复杂类型时,可以简化代码...

  • c++ primer 阅读 day4

    2.5.2 auto 类型说明符 可以从表达式推断出要定义变量的类型, 编译器是将引用的对象的类型作为auto的类...

  • C++ 写个游戏引擎—(基础篇)10

    今天说一说关键 auto 的用法 auto 这种用法就类似于C# 中的 var 关键字。auto的自动类型推断发生...

  • C++11中auto和decltype

    C++11中auto和decltype auto和decltype都是C++11中引进来用于自动推断类型的关键字,...

  • c++11 auto

    auto现在成了一个类型的占位符,通知编译器去根据初始化代码推断所声明变量的真实类型。 使用auto会拖慢c++效...

  • 基础

    auto 自动类型推断,优点是自动推导,使编码变简单;缺点是可读性差,阅读代码时,不能确定变量的类型。 htt...

网友评论

      本文标题:auto类型推断

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