gpt4 book ai didi

c++ - 什么时候适合使用 std::optional

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

我想知道这是否会被视为 std::optional 的有效用法。我有一个返回 process_id(std::uint32_t 值)的函数,使用标准的“std::uint32_t 会更有效吗>"如果我​​们找不到目标进程 ID 或返回 std::optional 更合适则返回 0 的函数?

例子:

std::optional<std::uint32_t> FindProcessID(std::string_view process)
{
bool find = false;

if (!find)
// we fail to find the process_id and return nothing.
return std::nullopt;
else if (find)
return 100; // return the id
}

我在返回 unique_ptr 时也这样做——与只返回 nullptr 相反,但我不确定这是否会被视为对所述功能的“滥用”,以及是否只返回 0 并检查会更好对于那个值。提前谢谢你。

最佳答案

I was wondering if this would be considered a valid usage of std::optional

是的,是的,是的 - 这就是 std::optional 的用途!

would it be more efficient to return 0 if we fail

从技术上讲是的,std::optional 是一个包装器,因此它的开销很小。但是,这是代码中性能瓶颈的可能性极低。如果不确定,请创建基准并比较函数的两个版本。

I am currently doing this when returning a unique_ptr as-well, but I am unsure if this would be considered "abuse" of said feature

这确实不是 std::unique_ptr 预期的惯用用例。您的代码的读者会期望 std::unique_ptr 处理某些(可能是多态的)对象的独占所有权。将原始整数类型放入智能指针的有效场景也不多,将 std::unique_ptr 用于非常适合 std::optional< 的用例也不是好的做法.

关于c++ - 什么时候适合使用 std::optional,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55898115/

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