私の理解に基づいて、 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 の推定型が of なのunordered_map<string, int>::iterator
ですか?