const方法中at和operator []有什么区别?

时间:2017-11-14 11:31:08

标签: c++ c++11 unordered-map

我正在写作业,我遇到了一些问题 使用以下unordered_map:

std::unordered_map<std::string, Account*> m_accounts_map;

编译没有错误:

const Account& Bank::getBankAccount(const std::string ID) const
{
    return *m_accounts_map.at(ID);
}

不编译:

const Account& Bank::getBankAccount(const std::string ID) const
{
    return *m_accounts_map[ID];
}

以上代码生成以下编译错误:

  

错误:传递&#39; const std :: unordered_map,帐户*&gt;&#39;作为&#39;这个&#39;参数丢弃限定符[-fpermissive]

但是当我删除它编译的const时:

const Account& Bank::getBankAccount(const std::string ID)
{
    return *m_accounts_map[ID];
}

根据std::unordered_map::operator[] 不同的是:

  

类似的成员函数unordered_map :: at在具有键的元素存在时具有相同的行为,但在不存在时抛出异常。

但是这并没有解释这种行为。 我不明白为什么剂量operator[]会丢弃限定词。

那么我不知道的微妙差异是什么?

0 个答案:

没有答案