c++ - 是自动类型检测只看一个语句
问题描述
对于下面的两个 for 循环,它们是否等效?基本上自动查看“= 0”分配并查看iter
比较,s.size()
因此决定iter
是类型decltype(s.size())
吗?
string s;
for(auto iter=0; iter<s.size();iter++)
string s;
for(decltype(s.size()) iter=0; iter<s.size();iter++)
解决方案
看
iter
是比较,s.size()
所以决定iter
是类型decltype(s.size())
?
不auto
,只从初始化器中推导出类型,给定auto iter=0;
,类型是从0
那里推导出来的int
。
在变量的类型说明符中:
auto x = expr;
. 类型是从初始化器推导出来的。
您可以使用以下方式指定类型auto
:
auto iter = 0u; // unsigned int
auto iter = 0ul; // unsigned long int
auto iter = 0uz; // std::size_t, since C++23
顺便说一句decltype(s.size()) iter=0;
,类型会s.size()
根据 的规则推导出来decltype
,也不会受到iter
与s.size()
后面比较的事实的影响。