gpt4 book ai didi

c++ - 如何确保返回 vector 的常量

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:44:06 25 4
gpt4 key购买 nike

我问了相关问题here .现在它有点微妙。

代码如下:

class MyClass {
public:
const vector<unique_ptr<MyObject> >& get_const_objs() const;

private:
vector<unique_ptr<MyObject>> m_objs;
};

我的意图是从 get_const_objs() 返回的 vector 是只读的,但问题是因为 vector 的元素不是常量,所以调用者仍然可以更改单个元素,例如

const vector<unique_ptr<MyObject>>& objs = pMyClass->get_const_objs();
unique_ptr<MyObject> p = move(objs[0]);

我的解决方案是向 vector 中插入常量:

const vector<const unique_ptr<MyObject> >& get_const_objs() const;

但这会导致 get_const_objs() 的无聊实现,我将每个元素复制到一个新 vector 中:

const vector<const unique_ptr<MyObjects>>& MyClass::get_const_objs() const
{
vector<const unique_ptr<MyObjects>> ret;
for (const auto &obj : my_objs) {
ret.push_back(obj);
}
return ret;
}

是的,我可以将迭代器接口(interface)添加到 MyClass。还有其他解决办法吗?

我有一个限制:BOOST 不可用。但是我想知道 BOOST 解决方案是否真的有一个很好的使用标准的解决方案。

最佳答案

const vector<unique_ptr<MyObject>>& objs = pMyClass->get_const_objs();
unique_ptr<MyObject> p = move(objs[0]);

You cannot do it , 所以你不用担心!

objsconst vector<> & , 该 vector 的元素也被视为 const .因此,您不能“移动”它;你能移动常量对象吗?

关于c++ - 如何确保返回 vector <unique_ptr> 的常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25561663/

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