gpt4 book ai didi

c++ - 返回指针 vector 的类中的 const 方法

转载 作者:可可西里 更新时间:2023-11-01 16:36:48 27 4
gpt4 key购买 nike

假设我有这个类:

#include <vector>
using namespace std;

class Bag
{
vector<int*> items;

public:
void addItem(int* i)
{
items.push_back(i);
}
const vector<int*> getItems() const
{
return items;
}
};

问题是我想防止更改参数项中指针指向的值。但是使用从 getItems 返回的 vector 我可以更改指向的值。

现在,为了解决这个问题,我可以将参数项声明为 vector<const int*>但是我也无法更改类(class)中的值(value)观。有没有其他方法可以保护值但仍然不在项目声明中使用 const?

最佳答案

正如@KerrekSB 指出的那样,您需要重建 结构,将元素 的类型更改为常量:

std::vector<const int*> getItems() const { 
return std::vector<const int*>(items.begin(), items.end());
}

这里是 vector<const int*> 的构造函数利用 int* 的隐式转换至 const int* .你不能只返回 items在这里,因为 vector<T>invariant在 T 上。这直接意味着无法从 vector<int*> 进行转换至 vector<const int*>仅通过类型转换。


处理您的评论:

Is this the only way? I feel like creating a copy is inefficient.

至于拷贝,它只复制指针数据,因此通常每个元素 8 个字节。对于指向更大结构的指针 vector ,它通常可以忽略不计,但对于 int 的 vector 这确实是一个相当大的开销。

这让我们想到了一个问题:为什么首先要存储指针?简单存储vector<int> , 然后你可以返回一个 const&

关于c++ - 返回指针 vector 的类中的 const 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33126511/

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