What is std::expected in C++?(什么是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::variant<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?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:什么是C++中的std::Expect?
基础教程推荐
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 设计字符串本地化的最佳方法 2022-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- C++,'if' 表达式中的变量声明 2021-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01