下面的代碼表示,地圖作爲const
穿入operator[]
方法丟棄限定符:C++地圖訪問丟棄限定符(常數)
#include <iostream>
#include <map>
#include <string>
using namespace std;
class MapWrapper {
public:
const int &get_value(const int &key) const {
return _map[key];
}
private:
map<int, int> _map;
};
int main() {
MapWrapper mw;
cout << mw.get_value(42) << endl;
return 0;
}
這是因爲其在地圖上的訪問發生可能的分配的?不能將地圖訪問函數聲明爲const?
MapWrapper.cpp:10: error: passing ‘const std::map<int, int, std::less<int>, std::allocator<std::pair<const int, int> > >’ as ‘this’ argument of ‘_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&) [with _Key = int, _Tp = int, _Compare = std::less<int>, _Alloc = std::allocator<std::pair<const int, int> >]’ discards qualifiers
只是雞蛋裏挑骨頭,但MW可以簡單地聲明爲MapWrapper毫瓦; – luke 2008-11-04 18:40:04
好點 - 我用幾種語言編寫,所以我傾向於規範它們之間的語法,所以它們都適合我的腦海。 :) – cdleary 2008-11-04 19:03:57
我可以欣賞這一點。但要小心,在這種情況下,你有一個額外的對象構造和分配是不必要的。 – luke 2008-11-04 19:19:09