Sco*_*ham 7 c++ c++17 stdoptional
我正在使用 std::optional 编写一些代码,并且想知道 C++17 的“带有初始化程序的 if 语句”是否能够帮助解压缩值?
std::optional<int> optionalInt = GetOptionalInt();
Run Code Online (Sandbox Code Playgroud)
我在这里编写函数 Unpack:
if( auto [value, has_value] = optionalInt.Unpack(); has_value )
{
// Use value here.
}
Run Code Online (Sandbox Code Playgroud)
但是,我的问题是。C ++ 17“带有初始化程序的if语句”在这里有帮助吗?如果是这样,它将如何编码?
更新,这实际上主要是使用 optional 时的一个问题,这非常容易被误用,因为 optional 和 *optional 都返回 bool 并且当有人尝试访问该值并忘记 *.
没有,也不可能有,这样的 Unpack()功能。
但你当然可以这样做:
if (std::optional<int> o = GetOptionalInt(); o) {
// use *o here
}
Run Code Online (Sandbox Code Playgroud)
虽然额外的o检查有点多余。
如果optional<T>对最多一个元素的容器进行建模,那么这是最好的地方之一,这样您就可以执行以下操作:
for (int value : GetOptionalInt()) {
// possibly not entered
}
Run Code Online (Sandbox Code Playgroud)
但是我们没有那个接口。