Der folgende Code besagt, dass die Karte als const
in die operator[]
Methode übergeben verwirft Qualifier:C++ Karte Zugang verwirft Qualifier (const)
#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;
}
Ist dies wegen der möglichen Zuordnung, die auf der Karte Zugriff auftritt? Können keine Funktionen mit Map-Zugriffen als const deklariert werden?
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
Nur nitpick, aber mw kann einfach als MapWrapper deklariert werden MW; – luke
Guter Punkt - Ich schreibe in ein paar Sprachen, deshalb tendiere ich dazu, die Syntax zu normalisieren, so dass sie alle in meinen Kopf passen. :) – cdleary
Ich kann das schätzen. Seien Sie vorsichtig, in Fällen wie diesem haben Sie eine zusätzliche Objektkonstruktion und Zuweisung, die nicht notwendig sind. – luke