for语句中自动变量的推导类型
Deduced type of auto variable in for statement
考虑以下代码片段:
for (auto loopcontrol = 0; loopcontrol < 10; loopcontrol++)
{
...
}
loopcontrol
的类型是如何推导出来的?
在我使用的 C++ 编译器 (Microsoft Visual Studio 2017) 上它是 int
,但为什么不是,例如long
?
是0
的类型吗?
auto
从初始化表达式推导出变量的类型(它是初始化器类型的衰减类型)。在您的示例中,loopcontrol
的类型是 0
的类型。 0
的类型是 int
.
根据文档,
对于变量,auto 变量的类型将从其初始值设定项推导出来。一旦确定了初始化程序的类型,编译器就会使用函数调用中 template argument deduction 的规则来确定将替换关键字 auto 的类型。
对于函数,return 类型将从它的 return 语句推导出来(C++14 起)。
对于非类型模板参数,类型将从参数推导出来 (C++17 起)。
考虑以下代码片段:
for (auto loopcontrol = 0; loopcontrol < 10; loopcontrol++)
{
...
}
loopcontrol
的类型是如何推导出来的?
在我使用的 C++ 编译器 (Microsoft Visual Studio 2017) 上它是 int
,但为什么不是,例如long
?
是0
的类型吗?
auto
从初始化表达式推导出变量的类型(它是初始化器类型的衰减类型)。在您的示例中,loopcontrol
的类型是 0
的类型。 0
的类型是 int
.
根据文档,
对于变量,auto 变量的类型将从其初始值设定项推导出来。一旦确定了初始化程序的类型,编译器就会使用函数调用中 template argument deduction 的规则来确定将替换关键字 auto 的类型。
对于函数,return 类型将从它的 return 语句推导出来(C++14 起)。
对于非类型模板参数,类型将从参数推导出来 (C++17 起)。