KJ7*_*LNW 3 c++ reference return-value return-by-reference
我正在使用返回引用的现有代码,如下所示:
int &func()
{
static int i = 5;
return i;
}
Run Code Online (Sandbox Code Playgroud)
我想将错误情况返回为“NULL”,但当然 NULL 在按引用返回函数中不起作用。如果这返回一个指针我可能会这样做:
int *func()
{
static int i = 5;
if (!good)
return NULL;
else
return &i;
}
Run Code Online (Sandbox Code Playgroud)
除了转换为基于指针的返回值之外,是否有返回失败状态的最佳实践?
是的,c ++ 17引入了std::可选,它可以为空,但它不能有引用,所以std::optional<<std::reference_wrapper<int>>是正确的“标准”返回。
std::optional<<std::reference_wrapper<int>> func()
{
static int i = 5;
if (!good)
return std::nullopt; // return {}; works here
else
return i;
}
Run Code Online (Sandbox Code Playgroud)
后来c++20引入了std::expected,它也可以返回一个信号Error Type来表示更多信息,而不仅仅是“失败”。
即使您使用旧的 C++ 标准,您仍然可以在 C++11 库中使用可选,与C++11 库中的预期相同。
c++11 可选库可以保存引用,因此您可以使用它来获得更清晰的代码。
tl::optional<int&> func()
{
static int i = 5;
if (!good)
return tl::nullopt; // return {}; works here
else
return i;
}
Run Code Online (Sandbox Code Playgroud)