草庐IT

Optional

全部标签

c++ - 如何从 std::optional<T> 移动

考虑以下示例,我们解析数据并将结果传递给下一个函数:ContentParse(conststd::string&data);voidProcess(Contentcontent);intmain(){autodata=ReadData();Process(Parse(data));}现在让我们使用std::optional更改代码处理失败的解析步骤:optionalParse(conststd::string&data);voidProcess(Contentcontent);intmain(){autodata=ReadData();autocontent=Parse(data);i

c++ - 为什么移动 std::optional 不会重置状态

我很惊讶地发现std::optional的移动构造函数(以及相关的赋值)不会重置移动的可选值,如[19.6.3.1/7]其中指出“bool(rhs)未更改。”这也可以通过以下代码看出:#include#include#include#includeintmain(){std::optionalfoo{0};std::optionalbar{std::move(foo)};std::cout这似乎与标准库中的其他移动实例相矛盾,例如std::vector移动的容器通常以某种方式重置(在vector的情况下,它保证为空之后)使其“无效”,即使其中包含的对象本身已被移动。这个决策应该支持这个

c++ - 当你想实现一个可以返回 "nothing"的函数时,何时使用 boost::optional 以及何时使用 std::unique_ptr ?

据我了解,有两种方法可以实现有时不返回结果的函数(例如在ppl列表中找到的人)。*-我们忽略原始ptr版本,与bool标志配对,并在未找到版本时出现异常。boost::optionalfindPersonInList();或std::unique_ptrfindPersonInList();那么有什么理由比另一个更喜欢一个吗? 最佳答案 这取决于:您希望返回句柄还是拷贝。如果你想返回一个句柄:Person*boost::optional都是可接受的选择。我倾向于使用Ptr在空访问的情况下抛出的类,但这是我的偏执狂。如果您希望返回拷贝

c++ - std::optional 从方法返回可选值的最佳替代方案? (使用 C++98/C++11/C++14)

显然,std::optional如果使用C++17或boost(另见GOTW#90),是从函数返回可选值的最佳选择std::optionalpossiblyFailingCalculation()但是,如果一个人被旧版本卡住(并且不能使用boost),那么最好的选择是什么?为什么?我看到了几个选项:STL智能指针(仅限C++11)std::unique_ptrpossiblyFailingCalculation();(+)与可选的用法几乎相同(-)对非多态类型或内置类型的智能指针感到困惑与bool配对std::pairpossiblyFailingCalculation();旧式boo

c++ - 用于比较原始类型的 std::optional 的有趣程序集

Valgrind在我的一个单元测试中快速有条件的跳转或移动取决于未初始化的值。检查程序集,我意识到以下代码:booloperator==(MyTypeconst&left,MyTypeconst&right){//...somecode...if(left.getA()!=right.getA()){returnfalse;}//...somecode...returntrue;}在哪里MyType::getA()const->std::optional,生成以下程序集:0x00000000004d9588:xoreax,eax0x00000000004d958a:cmpBYTEPTR

node.js - npm 的 'Skipping failed optional dependency' 是什么意思?

最新版本的node和npm导致运行karma出现问题。当我尝试安装karma-clinpmi-gkarmakarma-cli我收到以下警告:npmWARNoptionalSkippingfailedoptionaldependency/chokidar/fsevents:npmWARNnotsupNotcompatiblewithyouroperatingsystemorarchitecture:fsevents@1.0.8npmWARNoptionalSkippingfailedoptionaldependency/gulp-karma/chokidar/fsevents:npmWA

Python - typing 模块 —— Optional

前言typing是在python3.5才有的模块前置学习Python类型提示:https://www.cnblogs.com/poloyy/p/15145380.html常用类型提示https://www.cnblogs.com/poloyy/p/15150315.html类型别名https://www.cnblogs.com/poloyy/p/15153883.html NewTypehttps://www.cnblogs.com/poloyy/p/15153886.htmlCallablehttps://www.cnblogs.com/poloyy/p/15154008.htmlTypeV

java - 有没有一种优雅的方法可以将 Map<P, Optional<Q>> 转换为稀疏 Map<P, Q>?

有没有一种优雅的方法来转换Map>到稀疏Map?这应该可行,但有点笨拙:Map>map=...;Mapmap2=map.entrySet().stream().filter(e->e.getValue().isPresent()).collect(Collectors.toMap(e->e.getKey(),e->e.getValue().get())); 最佳答案 我想说你的方式几乎已经是最优雅的方式了,我只会做一些轻微的外观改动,并用Entry替换你的收集器中的e->e.getKey()::getKey。这只是一个很小的变化,但

java - Stream.findFirst 与 Optional.of 不同?

假设我有两个类和两个方法:classScratch{privateclassA{}privateclassBextendsA{}publicOptionalgetItems(Listitems){returnitems.stream().map(s->newB()).findFirst();}publicOptionalgetItems2(Listitems){returnOptional.of(items.stream().map(s->newB()).findFirst().get());}}为什么getItems2编译而getItems给出编译器错误incompatibletyp

java - 返回 Optional<T> 的方法的 Mockito 错误

我有如下方法的接口(interface)publicinterfaceIRemoteStore{Optionalget(StringcacheName,Stringkey,String...rest);}实现该接口(interface)的类的实例称为remoteStore。当我用mockito模拟这个并使用该方法时:Mockito.when(remoteStore.get("a","b")).thenReturn("lol");我得到错误:CannotresolvedthemethodthenReturn(java.lang.String)我认为这与get返回Optional类的实例有