根据我的理解,用 auto 声明的变量的类型是从它的初始化器推导出来的。
int main()
{
unordered_map<string, int> dict;
dict.insert({"a", 10});
cout << dict["a"] << endl;
auto iter = dict.find("a");
if (iter != dict.end())
iter->second = 30;
cout << dict["a"] << endl;
unordered_map<string, int>::iterator iterModify = dict.find("a");
iterModify->second = 300;
unordered_map<string, int>::const_iterator iterNonModify = dict.find("a");
iterNonModify->second = 400; // error: read-only variable is not assignable
}
在上面的例子中,正如你所看到的,auto 的类型似乎进一步受到了定义变量的使用的限制iter
,它的类型是unordered_map<string, int>::iterator
. 但是,如果没有以下几行,编译器如何正确推断 auto 的类型?
问题>“使用 auto 声明的变量的类型仅从其初始化程序推导出来”是真的吗?如果是这样,为什么推断的 iter 类型是unordered_map<string, int>::iterator
?