我想知道这是否被认为是std :: optional的有效用法。我有一个返回process_id
(值std::uint32_t
的函数,如果没有找到目标进程ID,有一个标准的“ std::uint32_t
”函数返回0会更有效吗?还是返回std :: optional更合适?
示例:
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并检查为那个价值。预先谢谢你。
答案 0 :(得分:10)
我想知道这是否被视为
的有效用法。std::optional
是的,是的,是的-这就是std::optional
的目的!
如果失败,返回0会更有效
从技术上讲,std::optional
是包装器,因此开销很小。但是,这可能是代码中的性能瓶颈。如果不确定,请创建一个基准测试并比较函数的两个版本。
我目前正在返回一个unique_ptr时正在执行此操作,但是我不确定是否将其视为所述功能的“滥用”
这确实不是std::unique_ptr
的预期惯用例。您的代码读者希望std::unique_ptr
处理某些(可能是多态的)对象的专有所有权。既没有很多有效的方案将原始整数类型放入智能指针中,也不是将std::unique_ptr
用于最适合std::optional
的用例的优良作法。