草庐IT

Optional类

全部标签

c++ - 如何包装返回 boost::optional<T> 的 C++ 函数?

我想包装一个返回boost::optional的函数.也就是说,给定:classFoo{boost::optionalfunc();};我想以某种方式包装它,以便Python获得T按值,或None:class_("Foo").def("func",func,return_value_policy);通常如果它只返回一个T,我可以使用:class_("Foo").def("func",func,return_value_policy());但是因为它返回一个boost::optional,它也可以返回boost::none,我希望它最终成为Python的None.有没有办法用现有的转换器

c++ - 普通默认可构造的 std::optional 和 std::variant

可以设计吗std::optional(当前std::experimental::optional)以这种方式,对于普通的默认可构造类型T对应std::optional也是默认可构造的吗?同样的问题重新阅读std::variant及其积分判别器。我自己的回答是:“不行,不能这么设计,因为如果对象有自动存储期,或者是非reinterpret_cast-ed,默认初始化时得到的它的整数鉴别器的值是不确定的-零初始化存储。”要求用户每次都进行值初始化在我看来是不允许的。 最佳答案 您的回答是正确的:不能。规范要求在默认构造时将其“初始化标志

c++ - boost::optional 的比较 (<)、输出 (<<) 和赋值 (=)

我有几个关于如何boost::optional的问题作品。让我们首先这样做:boost::optionali;是i总是等于*i(和其他关系运算符类似)?条件是否正确i和*i未定义?(i仍未设置任何值)什么是std::cout应该打印吗?我很确定i=3始终与*i=3相同.如果是这样,我应该更喜欢哪个? 最佳答案 没有。如果i未初始化,第一个将返回true,而第二个将断言。没有。operator的文档清楚地表明,如果左侧参数未初始化,它将返回true设置右手操作数时。没有operator对于optional所以我假设它会返回unspec

c++ - 如何脱离 std::experimental::optional?

使用Boost,我可以创建一个可选的就地:boost::optionalwork=boost::in_place(boost::ref(io_service));并通过以下方式解除它:work=boost::none;有了C++14/实验性支持,我可以改为构建一个可选的就地:std::experimental::optionalwork;work.emplace(boost::asio::io_service::work(io_service));但我不知道如何解除它... 最佳答案 work=std::experimental::

c++ - 显式初始化 std::optional 时,我应该使用 nullopt 吗?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭6年前。Improvethisquestion安std::optional可以像这样初始化为脱离状态:std::optionaloi{nullopt};但也像这样:std::optionaloi{};赋值也是如此(oi={}或oi=nullopt)。除了个人喜好/美感之外,这两者之间是否存在差异,使我更喜欢其中之一?还是根本不重要?注意:我问的是我想显式初始化可选的情况,而不是默认初始化它(例如为了强调)。

c++ - 在进程间内存中使用 boost::optional 是否安全?

请考虑以下结构:structThingThatWillGoInSharedMemory{boost::optionalopt_value;};我正在使用boost::interprocess来创建共享内存区域。我对boost::optional的理解是它是一个有区别的union,而不是一个可为空的指针。作为一个反例,像std::map和std::vector这样使用堆的东西需要一个显式分配器才能在进程间内存中使用它们,但是boost::optional,我相当确定不使用堆并且等同于写作:structThingThatWillGoInSharedMemory{boolvalue_init

c++ - experimental::optional nullopt_t 构造函数

Here描述了nullopt_t和nullopt用于为c++提议的optional对象:structnullopt_t{seebelow};constexprnullopt_tnullopt(unspecified);[...]Typenullopt_tshallnothaveadefaultconstructor.Itshallbealiteraltype.Constantnulloptshallbeinitializedwithanargumentofliteraltype.原因在Theop={}syntax中有解释。文档章节:为了使op={}明确,必须采用一些技巧,其中之一是nu

c++ - 使用带有 std::optional 参数的 std::function 重载歧义

这是一个简单的示例程序:usingfn_string=function;usingfn_optional_string=function&)>;voidfoo(fn_string){cout&){});//它有2个重载foo()--一个使用string的函数参数和另一个optional.为什么第二次调用foo()模棱两可?有没有简单的方法来修复它?没有Actor?更新以上是我试图解决的以下现实世界问题的过度简化示例,即:usingdelegate=variant,function,function&)>>;structfoo{voidadd_delegate(delegatefn){f

Optional类的使用指南:解决空指针异常

在Java应用程序中,空指针异常是导致程序失败的最常见原因之一。为了更加优雅地处理空指针异常,Java8引入了Optional类库。Optional实际上是一个容器,可以保存类型T的值,或者仅仅保存null。通过使用Optional,我们能够避免显式进行空值检测,使代码更加清晰和健壮。1.Optional类是什么?Optional类(java.util.Optional)是一个容器类,它可以保存类型T的值,代表这个值存在。或者仅仅保存null,表示这个值不存在。原来用null表示一个值不存在,现在Optional可以更好的表达这个概念。并且可以避免空指针异常。Optional提供很多有用的方法

c++ - boost::optional 不允许我重新分配 const 值类型

在我看来应该有四个变体boost::optionaloptional=>持有一个可变的Foo并且可以在初始化后重新分配optionalconst=>持有一个constFoo并且不能在初始化后重新分配optionalconst=>(应该?)持有一个可变的Foo但不能在初始化后重新分配optional=>(应该?)持有一个constFoo并且可以在初始化后重新分配前2个案例按预期工作。但是optionalconst取消对constFoo的引用,以及optional不允许在初始化后重新分配(如thisquestion中所述)。const值类型的重新分配是我遇到的具体问题,错误是:/usr/i