gpt4 book ai didi

c++ - 如何防止过滤来自非常量访问指针的指针 vector 的函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:15:19 26 4
gpt4 key购买 nike

我有一个函数,它过滤指针 vector ,返回过滤后的版本。根据其参数的性质,类型为 const vector<Data*>& , 它可以改变 Data结构体,由指针指向。有什么办法让它无法改变Data通过指针,同时仍然能够返回 vector<Data*> , 其参数的过滤版本?

最佳答案

你有一个一元函数:

(const vector<Data*>&)

您不能将指针的常量强制转换为 vector 内部,但您可以更改函数的参数类型。我建议这样做:

(const Data* const*, size_t)

然后,这样调用它:

filter(vec.data(), vec.size());

现在您的函数正在接受指向 const Data 的指针,因此无法更改它们。调用者不需要做任何特别的事情。如果你想保持旧的调用风格,你可以制作一个包装器:

filter(const vector<Data*>& vec) {
return filter(vec.data(), vec.size());
}

至于返回类型,可以用const_cast来实现:

vector<Data*> filter(const Data* const* data, size_t size) {
vector<Data*> results;
for (size_t ii = 0; ii < size; ++ii) {
results.push_back(const_cast<Data*>(data[ii]));
}
return results;
}

这些都不能提供“完美”的安全性,但是 const 永远不会!

关于c++ - 如何防止过滤来自非常量访问指针的指针 vector 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34371345/

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