const成员函数可变

时间:2016-11-17 14:57:29

标签: c++ const

正如我所理解的那样,成员函数末尾的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

这意味着会员被修改了......对吗? 所以我好像在这里想念一下......为什么私有成员矢量哈希表被修改了?

3 个答案:

答案 0 :(得分:4)

您的数据成员是指向向量的指针。在const成员函数insert中,所有数据成员都是const,因此您的数据成员现在被视为指向向量的const指针。由于您不尝试修改指针本身(例如hashtable = nullptr)但指向它的向量,因此将修改向量。

答案 1 :(得分:1)

  • 指向某种类型的const指针

  • 指向某个const类型的指针

他们是完全不同的

答案 2 :(得分:0)

成员函数的const说明符允许在对象为const时调用该函数。因此,不允许该函数修改成员或调用非const成员函数。