5

我想知道这是否会被认为是 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 并检查该值. 先感谢您。

4

1 回答 1

11

我想知道这是否会被认为是有效的用法std::optional

是的,是的,是的——这就是std::optional目的!

如果我们失败,返回 0 会更有效吗

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

我目前也在返回 unique_ptr 时这样做,但我不确定这是否会被视为对所述功能的“滥用”

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

于 2019-04-29T06:40:38.830 回答