考虑以下代码段:
for (auto loopcontrol = 0; loopcontrol < 10; loopcontrol++)
{
...
}
如何推断loopcontrol
的类型?
在我使用的C ++编译器(Microsoft Visual Studio 2017)上,它是int
,但为什么不这样呢? long
?
是0
的类型吗?
答案 0 :(得分:4)
auto
从初始化表达式推导变量的类型(它是初始化程序类型的衰减类型)。在您的示例中,loopcontrol
的类型是0
的类型。 0
的类型为int
。
答案 1 :(得分:1)
从文档中
对于变量,自动变量的类型将从其初始值设定项推导出。确定初始化程序的类型后,编译器将使用函数调用中template argument deduction的规则来确定将替换关键字auto的类型。
对于函数,返回类型将从其return语句推导出(从C ++ 14开始)。
对于非类型模板参数,将从参数(从C ++ 17开始)推导类型。