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?
 
				
         
 
            
        - GDB 不显示函数名 2022-01-01
- 将函数的返回值分配给引用 C++? 2022-01-01
- DoEvents 等效于 C++? 2021-01-01
- 如何提取 __VA_ARGS__? 2022-01-01
- 从父 CMakeLists.txt 覆盖 CMake 中的默认选项(...)值 2021-01-01
- 使用 __stdcall & 调用 DLLVS2013 中的 GetProcAddress() 2021-01-01
- XML Schema 到 C++ 类 2022-01-01
- 哪个更快:if (bool) 或 if(int)? 2022-01-01
- OpenGL 对象的 RAII 包装器 2021-01-01
- 将 hdc 内容复制到位图 2022-09-04
 
						 
						 
						 
						 
						