const成员函数可变
问题描述:
由于我给予理解,在一个成员函数的端部的常量说明符意味着该类的成员不能修改,在该函数内,除非它们被声明为可变的。 话虽如此,我有以下几点: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);
}
....
}
和我在我的主要功能:
void testhash(){
HashTable<int> testhashtable1(100);
std::cout << testhashtable1.find(45) << std::endl;
testhashtable1.insert(45);
std::cout << testhashtable1.find(45) << std::endl;
}
鉴于哈希表::刀片是const函数我认为我将无法修改私有成员哈希表。但testhash()打印:
这意味着被修改的构件是吗? 所以我似乎错过了这里的东西......为什么私人会员矢量哈希表修改?
答
你的数据成员是一个指针,指向向量。在const
成员函数insert
所有数据成员将const
,让您的数据成员现在被认为是一个const指针的向量。既然你不尝试修改指针本身(例如hashtable = nullptr
),但通过矢量它指出,向量将被修改。
答
的const
说明符成员函数允许,如果对象是const
被调用的函数。因此该函数不允许修改成员或调用非const成员函数。
答
一个const指向某种类型的
一个指向某个常数类型
他们是完全不同的
'长长int'是写'很旧的方式intmax_t'或'ssize_t'。但是如果你想要一个大小,也许最好有一个无符号整数?像'uintmax_t'或'size_t'。并且可以具有[大小的方法]的矢量的大小(http://www.cplusplus.com/reference/vector/vector/size/) – Stargateur
@Stargateur'ssize_t'不是标准的一部分。 'size_t'是。 – 2016-11-17 15:27:50