【发布时间】:2013-06-27 02:22:39
【问题描述】:
根据我的理解,用 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?
【问题讨论】:
-
如果没有以下几行,您认为该类型会是什么?