Wie ich zu verstehen bin, bedeutet der const-Bezeichner am Ende einer Member-Funktion, dass die Member der Klasse innerhalb dieser Funktion nicht geändert werden können, es sei denn, sie werden als veränderlich deklariert. Nachdem ich gesagt habe, dass ich folgendes habe:const Member-Funktion veränderbar
mns :: list :: list ist eine verkettete list implementierung von mir welche funktionen sind nicht const.
template<typename T> class HashTable{
private:
std::vector<mns::list::list<T> * > * hashtable;
long long int size;
public:
HashTable(int _size){
hashtable = new std::vector<mns::list::list<T> * >(_size, NULL);
size = _size;
}
....
bool insert(T _value) const {
long long int hash_value = getHash(_value);
if (hashtable->at(hash_value) == NULL) hashtable->at(hash_value) = new mns::list::list<T>(_value);
else if (hashtable->at(hash_value)->find_forward(_value) == -1) hashtable->at(hash_value)->push_top(_value);
}
....
}
und ich habe eine Funktion in meinem Haupt:
void testhash(){
HashTable<int> testhashtable1(100);
std::cout << testhashtable1.find(45) << std::endl;
testhashtable1.insert(45);
std::cout << testhashtable1.find(45) << std::endl;
}
Da HashTable :: insert eine konstante Funktion ist i angenommen, dass ich nicht privat Mitglied hashtable ändern würde. Aber testhash() druckt:
, die das Element bedeutet, wurde modifiziert, ... nicht wahr? Also ich vermisse etwas hier ... Warum wurde der private Member-Vektor hashtable modifiziert?
'long long int' ist sehr alte Art und Weise' zu schreiben intmax_t' oder 'ssize_t'. Aber wenn Sie eine Größe wünschen, ist es vielleicht besser, eine Ganzzahl ohne Vorzeichen zu haben? wie das 'uintmax_t' oder 'size_t'. Und Sie können Größe eines Vektors mit [Größe Methode] haben (http://www.cplusplus.com/reference/vector/vector/size/) – Stargateur
@Stargateur 'ssize_t' ist nicht Teil des Standards. 'size_t' ist. –