gpt4 book ai didi

c++ - 常量成员函数可变

转载 作者:太空宇宙 更新时间:2023-11-04 16:02:45 25 4
gpt4 key购买 nike

据我所知,成员函数末尾的 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 函数,我假设我无法修改私有(private)成员哈希表。但是 testhash() 打印:

0

1

这意味着成员被修改了……对吧?所以我在这里似乎漏掉了一些东西......为什么私有(private)成员 vector 哈希表被修改了?

最佳答案

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

关于c++ - 常量成员函数可变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40658109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com