隨着C++ 11的出現,我們有了unordered_map.cbegin/cend來專門返回const_iterator的值。所以在表達式「auto it = unordered_map.cbegin()」中推導出的'it'類型是const_iterator。但是,當涉及到unordered_map.find(key)函數時,我認爲可能會缺少一個「cfind()」對象,它會專門返回一個const_iterator。有人說我們可以使用「const auto it = unordered_map.find(key)」來獲得一個「const iterator」,但是我強烈懷疑「const iterator」是相同的「const_iterator」,其中「 const iterator「限制了更改迭代器本身的能力,而」const_iterator「限制了更改迭代器所引用內容的能力。因此,如果我們想充分利用「自動」類型演繹(瞭解混淆或「自動」類型演繹的變化 - 自動,自動&,常量自動&等)的優勢, ,我怎麼能讓unordered_map.find(key)返回一個「const_iterator」,而我不必顯式地指定「const_iterator」 - 這是所有最好的用例!演繹「auto it = unordered_map.find(key)」的類型?
以下是一個演示編譯器行爲的簡單示例代碼:
#include "stdafx.h"
#include <unordered_map>
int _tmain(int argc, _TCHAR* argv[])
{
typedef std::unordered_map<int, int> umiit;
umiit umii;
auto it0 = umii.find(0);
it0->second = 42;
const auto it1 = umii.find(0);
it1->second = 42;
umiit::const_iterator it2 = umii.find(0);
it2->second = 42; // expected compiler error: assigning to const
return 0;
}
有什麼問題? –
問題出現在第四段中:**我怎樣才能讓unordered_map.find(key)返回一個「const_iterator」而不必顯式指定「const_iterator」?** – dfan