for语句中的自动变量的推导类型

时间:2018-11-29 13:59:36

标签: c++ c++11 integer literals auto

考虑以下代码段:

  for (auto loopcontrol = 0; loopcontrol < 10; loopcontrol++)
  {
     ...
  }

如何推断loopcontrol的类型?

在我使用的C ++编译器(Microsoft Visual Studio 2017)上,它是int,但为什么不这样呢? long

0的类型吗?

2 个答案:

答案 0 :(得分:4)

auto从初始化表达式推导变量的类型(它是初始化程序类型的衰减类型)。在您的示例中,loopcontrol的类型是0的类型。 0的类型为int

答案 1 :(得分:1)

从文档中

对于变量,自动变量的类型将从其初始值设定项推导出。确定初始化程序的类型后,编译器将使用函数调用中template argument deduction的规则来确定将替换关键字auto的类型。

对于函数,返回类型将从其return语句推导出(从C ++ 14开始)。

对于非类型模板参数,将从参数(从C ++ 17开始)推导类型。