dev*_*ptr 4 c++ stl return unique-ptr stdoptional
我想知道这是否被认为是std :: optional的有效用法。我有一个返回process_id(std::uint32_t值)的std::uint32_t函数,如果没有找到目标进程ID,返回一个标准的“ ”函数会更有效吗?或者返回一个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
}
Run Code Online (Sandbox Code Playgroud)
在返回unique_ptr以及返回nullptr的同时,我也在这样做,但是我不确定是否将其视为所述功能的“滥用”,并且最好返回0并检查该值是否更好。先感谢您。
lub*_*bgr 10
我想知道这是否被认为是
std::optional
是,是,是-这是干什么std::optional的!
如果失败会更有效地返回0
从技术上讲,std::optional是的,它是包装程序,因此开销很小。但是,这可能是代码中的性能瓶颈。如果不确定,请创建一个基准并比较函数的两个版本。
我目前在返回unique_ptr时正在执行此操作,但是我不确定是否将其视为所述功能的“滥用”
这确实不是的预期惯用用例std::unique_ptr。您的代码读者希望std::unique_ptr能够处理某些(可能是多态的)对象的专有所有权。既没有很多有效的方案将原始整数类型放入智能指针中,也没有一种适合std::unique_ptr用于的用例的良好实践std::optional。