gpt4 book ai didi

c++ - 返回 C++ const 项,取决于是否存在,安全

转载 作者:太空狗 更新时间:2023-10-29 23:34:54 26 4
gpt4 key购买 nike

我有一个 std::unordered_map<uint64_t, Object> _map我想为客户提供一个只读的 getter。

最初我是这样想的:

bool foundItem(const uint64_t key, Object& object) const
{
if(_map.find(key) != _map.end())
{
object = _map.at(key);
return true;
}
else
{
return false;
}
}

但显然这不是只读的,所以我更改了签名以返回对象并且 bool 可以通过引用传递:

const Object& foundItem(const uint64_t key, bool& found) const
{
if(_map.find(key) != _map.end())
{
found = true;
return _map.at(key);
}
else
{
found = false;
// What can I return here??
}
}

但现在如果找不到 key ,我没有类型可以返回。

允许用户对(可能)返回的对象进行只读访问的最佳方法是什么?

最佳答案

你可以返回一个指针:

// Returns nullptr if not found
const Object* getItem(const uint64_t key) const
{
auto it = _map.find(key);
if (it == _map.end())
return nullptr;

return &it->second;
}

或者您可以返回一个 std::optional,或者您可以返回 const Object& 但在查找失败时抛出异常。

在所有情况下,请注意记录结果的预期生命周期。特别是,您应该注释哪些成员函数将导致 this 函数的结果无效。通常这将是“任何非 const 函数”,例如 std::string::c_str() 在您对字符串执行突变操作之前是有效的。

关于c++ - 返回 C++ const 项,取决于是否存在,安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56397105/

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