Const成员函数可变
const member function mutable
正如我所理解的那样,成员函数末尾的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函数,我假设我不能修改私有成员HashTable。但是testhash()输出:
0
1表示成员被修改…对吧?所以我似乎错过了什么…为什么要修改私有成员向量哈希表?
数据成员是指向vector的指针。在const
成员函数insert
中,所有数据成员都是const
,所以你的数据成员现在被认为是指向向量的const指针。由于您不尝试修改指针本身(例如hashtable = nullptr
),而是修改它所指向的向量,因此向量将被修改。
-
指向某种类型的const指针
-
指向const类型的指针
它们完全不同
成员函数的const
说明符允许在对象为const
时调用该函数。因此,该函数不允许修改成员或调用非const成员函数。
相关文章:
- 如何使用指针传递给函数的数组中对象的函数成员
- c++构造函数成员初始化:传递参数
- 创建 std::函数,它返回具有函数成员值的变量.分段错误
- 如何在C++通过公共函数访问私有函数成员?
- 解释了构造函数成员初始化列表
- 调用std::函数成员时内存损坏
- 是否可以为模板类的模板函数成员设置别名?
- 捕获 lambda 函数C++成员变量
- 构造函数成员初始值设定项跨成员列出,安全吗?
- 获取与在模板参数中传递的函数成员类型相同的类
- 如何从公共函数成员访问地图私有成员
- C 构造函数成员分配优化
- 使用命名空间进行函数成员定义
- 函数成员作为 CUDA 内核的参数
- 模板基类函数成员的别名
- 函数成员中用于void和继承的enable_if
- 头文件中是否定义了一个很长的Class函数成员
- 类内/构造函数成员初始化
- 使用指向部分专用函数成员的指针自动填充向量
- 指向函数成员的指针