问题标签 [stdoptional]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 在哪些情况下 std::optional operator == 会导致未定义的行为?
Cppreference具有以下混合(可选和一些其他非可选类型)比较运算符的描述std::optional
:
将 opt 与值进行比较。只有当 opt 包含一个值时,才会比较这些值(使用 T 的相应运算符)。否则, opt 被认为小于值。如果 *opt 和 value 之间对应的双向比较表达式格式不正确,或者其结果不能转换为 bool,则行为未定义。
这里让我感到困惑的是:
这些格式不正确的比较的例子是什么?
为什么编译器/STL 不拒绝无效的比较而不是给我们 UB?
c++ - boost 是否有一个“紧凑的可选”,其中存在由特殊类型的值编码?
我正在寻找可选 ( sizeof small_optional<T> == sizeof (T)
) 的节省空间的实现。所以空虚是用一些特殊的 T 值编码的,例如
要求我从不将 -1 存储在 small_optional 中,因此 -1 可以用作魔术值来确定 optional 是否为空。
c++ - `std::make_optional` 的意义何在
std::make_
C++17 引入了Class 模板参数推导(除了make_unique
and make_shared
) ,使所有这些都变得多余。
那么有什么意义std::make_optional
呢?据我所知,它与std::optional
.
是否存在std::make_optional
优先于扣除指南的情况?
c++ - 为什么 std::string append 在 rval ref 上没有重载?
我很熟悉,append
instd::string
返回std::string&
,因此它不符合被移动的条件,所以结果不会被移动。
在那里您可以看到,后一个示例将产生更少的分配,因此在这种情况下,最好移动一些看起来像临时的东西。我的问题是为什么他们(委员会)不添加简单&&
的重载来生成结果,或者append
取决于上下文?我的意思是类似于正在做的事情。有没有一个例子可以证明这种优化是虚假的?std::string&
std::string&&
std::optional
value
c++ - 错误:没有匹配函数调用 'std::optional::可选(smoltcp::缓冲区&)'
我正在尝试创建一个返回std::optional
to的函数Buffer
:
Buffer
简单的在哪里
但我收到很多错误:
我std::optional
在其他情况下使用过,我看不出这里有什么问题。
我也尝试使用return std::optional<Buffer>{buffer};
.
c++ - 当 std::optional 被声明为局部变量且未显式初始化时,它是否设置为 std::nullopt?
当 anint
在本地声明(但未初始化或分配给)时,它的值未定义。什么时候std::optional<int>
在没有显式初始化的情况下在本地声明,同样适用吗?它总是std::nullopt
,还是具有未定义的价值?
c++ - std::optional 如何在幕后工作?
我刚刚了解了 c++ 17 中的 std::optional 特性以及其他一些非常有用的特性......
但是有一些关于 std::optional 的事情我不明白,我希望有人向我解释:
首先,据我所知,在 std::optional 中,返回值可以是指定的类型,也可以是这样的:
return {} 如何什么都不返回?例如,如果我要创建一个返回指定值或不返回任何值的类似类,我如何创建自己的类以便 return {} 有效?我在这里误解了什么?
我的第二个问题是,当你想检查返回值时,你可以这样做:
或者我也可以这样做:
我对此感到非常困惑,变量名如何返回布尔值?不像对象的构造函数可以返回任何东西,那这怎么可能呢?
再次假设我想创建自己的类,它类似于 std::optional 我如何制作它以便我的类的实例可以用作布尔值?
我真的很感激能解决我的问题的答案,而不是与何时使用 std::optional 或为什么我不应该创建自己的类来做同样的事情等相关的答案......
谢谢!
c++ - 我可以以某种方式返回 std::optional 与我的数据的 const-reference 以避免复制它吗?
假设我有一些基类可以选择返回一些特定的数据。它还为我提供了“hasData”功能来检查这些特定数据是否可供使用
这很好用,可以做我想要的。但是 'hasData' 和 'getData' 是很好的候选者,可以被一个返回 'std::optional' 的函数替换。但是当我尝试改进返回 std::optional 的 API 时,我意识到我不能再向我的内部数据返回“const 引用”
一种可能性是使用std::optional<Arg1> m_data
MyClassWithOptDerived - 但它对我来说看起来不太好 - 派生类肯定有数据,并且没有理由在其中存储 std::optional 。还需要将“m_data”移动到我绝对不想要的基类
在此类示例中使用 std::optional 并避免复制数据的任何其他可能性?
PS:我检查了一些文章,例如std::optional 专门化的引用类型,似乎无法避免数据复制,我可能应该在这里使用“旧式”界面。
更新: 谢谢大家这么快的回复。对我有用的解决方案是使用 std::reference_wrapper。解决方案代码看起来像
c++ - 从类方法返回可选
我在一个类中有一个可选成员,我想通过一个方法按值返回。示例代码:
该代码输出一些垃圾值。
我怎样才能做到这一点?
根据我的理解, optional 为底层类型(不仅仅是一个引用)存储了一个完全分配的内存,并且在返回一个可选变量时,底层类型的复制构造函数应该启动,它应该将内存原样复制到新的返回的可选值。