首页 > 解决方案 > 是自动类型检测只看一个语句

问题描述

对于下面的两个 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++)

标签: c++c++11auto

解决方案


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,也不会受到iters.size()后面比较的事实的影响。


推荐阅读