草庐IT

Optional类

全部标签

c++ - 是否可以 move boost::optional ?

我一直在尝试在具有boost::optional成员变量的类中定义默认move构造函数。#include#include#includestructbar{std::vectorvec;};structfoo{foo()=default;foo(foo&&)=default;boost::optionalhello;};intmain(){fooa;foob(std::move(a));}我的编译器同时支持move语义和默认的move构造函数,但我无法让它工作。%clang++foo.cc-std=c++11-stdlib=libc++foo.cc:15:7:error:calltod

c++ - 为什么返回 std::optional 有时会移动,有时会复制?

请参阅下面返回UserName的可选项的示例-可移动/可复制的类。std::optionalCreateUser(){UserNameu;return{u};//thisonewillcauseacopyofUserNamereturnu;//thisonemovesUserName}intmain(){autod=CreateUser();}为什么return{u}会导致复制而returnu会移动?以下是相关的大肠杆菌样本:http://coliru.stacked-crooked.com/a/6bf853750b38d110另一个案例(感谢@Slava的评论):std::uniqu

c++ - How to get around GCC ‘*((void*)& b +4)’ may be used uninitialized in this function warning while using boost::optional

我有类似下面的代码:#include::boost::optionalgetitem();intgo(intnr){boost::optionala=getitem();boost::optionalb;if(nr>0)b=nr;if(a!=b)return1;return0;}当使用GCC4.7.2和Boost1.53进行编译时,使用以下命令:g++-c-O2-Wall-DNDEBUG发出以下警告:13:3:warning:‘((void)&b+4)’maybeuseduninitializedinthisfunction[-Wmaybe-uninitialized]显然,根本问题在

c++ - 如何将 boost::optional 设置回未初始化状态?

如何“重置”/“取消设置”boost::optional?optionalx;if(x){//Wewon'thitthissincexisuninitialized}x=3;if(x){//Nowwewillhitthissincexhasbeeninitialized}//WhatshouldIdoheretobringxbacktouninitializedstate?if(x){//Idon'twanttohitthis} 最佳答案 x=boost::none; 关于c++-如何将

java - Guava 的 Optional 类有什么意义

我最近读到了这个并且看到有人在使用这个类,但在几乎所有情况下,使用null会同样有效——如果不是更直观的话。有人可以提供一个具体的例子,其中Optional可以实现null无法或以更简洁的方式实现的目标吗?我唯一能想到的是将它与不接受null键的Maps一起使用,但即使这样也可以通过null值的侧面“映射”来完成.谁能给我一个更有说服力的论据? 最佳答案 Guava团队成员在这里。null的一个最大缺点可能是它在任何给定上下文中的含义并不明显:它没有说明性的名称。null表示“此参数没有值”并不总是很明显-哎呀,作为返回值,有时它表

java - JPA 中的 @Basic(optional = false) 与 @Column(nullable = false)

@Basic(optional=false)和@Column(nullable=false)在JPA持久化中有什么区别? 最佳答案 GordonYorke(EclipseLink架构委员会成员、TopLink核心技术主管、JPA2.0专家组成员)就这个话题写了一个很好的答案,所以我不会转述他,而是引用hisanswer:Thedifferencebetweenoptionalandnullableisthescopeatwhichtheyareevaluated.Thedefinitionof'optional'talksabout

java - java.util.Optional为什么不是Serializable,如何用这样的字段序列化对象

Enum类是可序列化的,所以用枚举序列化对象没有问题。另一种情况是类具有java.util.Optional类的字段。在这种情况下会抛出以下异常:java.io.NotSerializableException:java.util.Optional如何处理这样的类,如何序列化它们?是否可以将此类对象发送到远程EJB或通过RMI?这是一个例子:importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.io.ObjectOutputStream;importjava.io.Serializable;im

java - Optional.flatMap 和 Optional.map 有什么区别?

这两种方法有什么区别:Optional.flatMap()和Optional.map()?一个例子将不胜感激。 最佳答案 如果函数返回您需要的对象,则使用map;如果函数返回Optional,则使用flatMap。例如:publicstaticvoidmain(String[]args){Optionals=Optional.of("input");System.out.println(s.map(Test::getOutput));System.out.println(s.flatMap(Test::getOutputOpt));

java - `Optional.orElse()` 和 `Optional.orElseGet()` 之间的区别

我试图了解Optional.orElse()之间的区别和Optional.orElseGet()方法。orElse()的描述方法是“如果存在则返回值,否则返回其他值。”同时,orElseGet()的描述方法是“如果存在则返回值,否则调用其他值并返回该调用的结果。”orElseGet()方法采用Supplier功能接口(interface),该接口(interface)本质上不带任何参数并返回T.在什么情况下需要使用orElseGet()?如果你有方法TmyDefault()你为什么不直接做optional.orElse(myDefault())而不是optional.orElseGet

java - 将 Java 8 的 Optional 与 Stream::flatMap 一起使用

新的Java8流框架和friend们编写了一些非常简洁的Java代码,但我遇到了一个看似简单但很难简洁地做到的情况。考虑一个Listthings和方法Optionalresolve(Thingthing)。我想将Thing映射到Optional并获取第一个Other。显而易见的解决方案是使用things.stream().flatMap(this::resolve).findFirst(),但flatMap要求您返回一个流,并且Optional没有stream()方法(或者它是Collection或提供将其转换为或查看为Collection的方法)。我能想到的最好的是:things.s