正如我所理解的那样,成员函数末尾的const说明符意味着在该函数中不能修改类的成员,除非它们被声明为可变的。 说完了,我有以下几点:
mns :: list :: list是我的链表实现,其函数不是const。
{"responseHeader":{"status":400,"QTime":0},"error":{"metadata":["error-class","org.apache.solr.common.SolrException","root-error-class","org.apache.solr.common.SolrException"],"msg":"undefined field: \"cat\"","code":400}}
This is the error
{"responseHeader":{"status":400,"QTime":0},"error":{"metadata":["error-class","org.apache.solr.common.SolrException","root-error-class","org.apache.solr.common.SolrException"],"msg":"undefined field: \"cat\"","code":400}}
我的主要功能是:
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);
}
....
}
鉴于HashTable :: insert是一个const函数,我假设我无法修改私有成员哈希表。但testhash()打印:
0
1
这意味着会员被修改了......对吗? 所以我好像在这里想念一下......为什么私有成员矢量哈希表被修改了?
答案 0 :(得分:4)
您的数据成员是指向向量的指针。在const
成员函数insert
中,所有数据成员都是const
,因此您的数据成员现在被视为指向向量的const指针。由于您不尝试修改指针本身(例如hashtable = nullptr
)但指向它的向量,因此将修改向量。
答案 1 :(得分:1)
指向某种类型的const指针
指向某个const类型的指针
他们是完全不同的
答案 2 :(得分:0)
成员函数的const
说明符允许在对象为const
时调用该函数。因此,不允许该函数修改成员或调用非const成员函数。