【发布时间】:2016-11-17 14:57:28
【问题描述】:
据我所知,成员函数末尾的 const 说明符意味着类的成员不能在该函数内被修改,除非它们被声明为可变的。 话虽如此,我有以下几点:
mns::list::list 是我的一个链表实现,它的函数不是 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);
}
....
}
我的 main 中有一个函数:
void testhash(){
HashTable<int> testhashtable1(100);
std::cout << testhashtable1.find(45) << std::endl;
testhashtable1.insert(45);
std::cout << testhashtable1.find(45) << std::endl;
}
鉴于 HashTable::insert 是一个 const 函数,我假设我无法修改私有成员哈希表。但是 testhash() 打印:
0
1
这意味着该成员已被修改...对吗? 所以我似乎在这里错过了一些东西......为什么私有成员向量哈希表被修改了?
【问题讨论】:
-
long long int是写intmax_t或ssize_t的非常古老的方式。但是如果你想要一个大小,也许最好有一个无符号整数?就像uintmax_t或size_t。您可以使用size method 获得向量的大小 -
@Stargateur
ssize_t不是标准的一部分。size_t是。