本文介绍了什么是C++中的std::Expect?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在最受尊敬的堆栈溢出答案之一中,我找到了std::expected
模板类用法的一个示例:
What are coroutines in C++20?
同时,我在cpprecie.com上找不到任何提到这个类的内容。你能解释一下是什么吗?
推荐答案
事实上,了解std::expected
的最好方式是著名的Andrei Alexandresu的一次有趣的演讲:"Expect the Expected!"
它是什么以及何时使用
以下是关于std::expected<T, E>
是什么的三个补充说明:
它是应该返回
T
值的函数的返回类型--但可能会遇到一些错误,在这种情况下,它将返回E
类型的该错误的描述符。示例:std::expected<ParsedData, ParsingError> parse_input(Input input_);
它是一种错误处理机制,可以替代抛出异常(在这种情况下,您总是返回您应该返回的值)和返回状态/错误代码(在这种情况下,您永远不会返回您想要返回的值,并且必须使用输出参数)。以下是应用于上一个定义中的函数的两种替代错误处理机制:
ParsedData parse_input_2(Input input) noexcept(false); ParsingError parse_input_3(ParsedData& result, Input input);
它是
T
和E
的区别并,使用了一些方便的方法。
更好的地方吗?
它的行为有点像std::optional<T>
,将焦点放在预期的情况,而不是意外的情况:
result.has_value()
-如果我们得到一个值而不是错误,则为True。if (result)
-检查相同的内容*result
-如果T
存在,则提供T
值,否则提供未定义的行为(与std::optional
相同,尽管许多人不喜欢这样)。result.value()
,如果T
值存在,则返回该值,否则抛出。
&q;嘿,我在标准中寻找它,但它不在那里!
没错,在撰写本文时,std::expected
是一个用词不当的词。它还没有被标准化,只是提出:P0323。不过,它看起来可能会进入C++23。
但协程又如何呢?
std::expected
和协程之间没有特殊关系。你链接到的答案似乎使用了类似的东西。它还使用std::unexpected
。这实际上是在标准中,但从C++11开始就被弃用了,请立即忘记它:-(
这篇关于什么是C++中的std::Expect?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!