问题标签 [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.

0 投票
3 回答
261 浏览

c++ - 为什么允许将 std::optional 与值进行比较?

能够比较 astd::optional<T>与的相等性是非常有用的T

我认为这种情况下的行为定义明确且清晰。

我不明白为什么允许这样做:

我期待这甚至无法编译。我认为这里发生的事情非常模糊。甚至将其添加到STL的原因是什么?

0 投票
2 回答
301 浏览

c++ - 为什么`std::optional::operator=` 当 T 包含 `const` 数据成员时删除?

以下代码会导致编译器错误:

例如,在 gcc 上,错误显示为:

在 MSVC 上,作为另一个示例,错误显示为:

只要我们删除const关键字 in const A a;,错误就会消失。根据std::optional 上的引用标准,在某些情况下 = 运算符的某些重载将被删除,具体取决于 std::is_...able_v 测试。在这种情况下,为什么const关键字会影响其中一些测试?

0 投票
1 回答
60 浏览

c++ - 如何使用 std::optional 的第二个重载::就位

std::optional::emplace 文档中有一个接受的重载std::initializer_list

前提是

std::is_constructible<T, std::initializer_list&, Args&&...>::value 为真

我认为它可能用于 emplace POD 类型,但显然这不是它的工作方式(在其他 SO 主题中,解释了emplace函数使用()语法而不是{}):

我可以编写构造函数接受initializer_list

然后emplace像这样调用:

但不应该首先emplace超载T& emplace( Args&&... args );就足够了吗?我认为它可能对数组类型有用,但std::optional<int[]> xxx;无论如何都不会编译。

您能否提供一些std::optional::emplace使用第二次重载的示例。

0 投票
0 回答
59 浏览

c++ - 在分支数据结构的另一个可选元素中使用 std::optional 模板

我有一个分支的数据结构,主要是由结构和整数构建的。一些元素使用 std::optional 模板签名。在可选结构元素的情况下,在另一个结构中,它本身也在另一个结构中作为可选引用,我得到错误:

Error (active) E0135 class "BasicContent" has no member "km"

这是产生此错误的代码:

奇怪的是,我可以运行代码并写入所有数据,但它一直显示这个错误。同样在手表中,“km”显示为 nullopt,但一切都很好。有没有解决方案,或者有什么我看不到的?

0 投票
2 回答
213 浏览

c++ - std::optional 成员是否连续存储?

我想我对如何存储可选值感到有些困惑。在构造包含std::optional<T>成员的类或结构时,这些成员是连续存储在内存中还是可选动态分配?例如,下面的结构会是一个连续的内存块吗?

0 投票
1 回答
103 浏览

c++ - 在这个简单的例子中,为什么 std::optional 的赋值运算符不能在编译时上下文中使用?

在使用 Compiler Explorer(以及在 std::optional 上阅读 cppref.com)半小时后,我放弃了。除了我不明白为什么这段代码不能编译之外,没什么可说的。有人请解释一下,如果有的话,也许给我一个解决方法?std::optional我在这里使用的所有成员函数都是constexpr,并且确实应该在编译时可计算,因为这里的可选类型 - size_t- 是原始标量类型。

https://godbolt.org/z/YKh5qT4aP

0 投票
1 回答
91 浏览

c++ - std::optional 构造函数中 in_place_t 背后的动机

我试图更好地理解构造函数背后in_place_t的动机。std::optional<T>我得到用例来消除使用默认构造函数构建null可选与类型的歧义。T但是,如果为std::optional构造函数指定了一个或多个参数,那么不能假设它们总是可以转发给构造函数T吗?

0 投票
2 回答
129 浏览

c++ - C++中的三元运算符生成什么对象?

以下程序

010即使在编译器优化的情况下也会 打印: https ://gcc.godbolt.org/z/asTrzdE3c

您能否解释一下为什么会这样,看似相同的 3 个案例之间有什么区别?

0 投票
1 回答
45 浏览

c++ - 将自动模板参数与 std::optional 结合,可能吗?

我真的很喜欢 C++17 的自动模板参数,因为我不必为了使用非类型模板参数(例如带有转发参数的函数)而跳槽。

但这让我开始思考,std::optional在转发函数没有有效结果的情况下,是否可以将它与其他类型(例如 )结合使用。例如:

目前这有几个问题:

这是一个玩具示例,但我希望有一些东西可以作为函数/调用的装饰器,这些函数/调用可能有助于一些通用的异常处理、清理和/或日志记录。

我愿意接受替代方案,std::optional只要有一种方法可以传达呼叫无法完成,因此不会返回任何结果。

0 投票
0 回答
56 浏览

c++ - 标准::可选:: 可以忽略变量的后续出现吗?

我是 C++ 的初学者,所以我的问题可能很幼稚。例如,在运行时我决定使用 std::optional 初始化一个变量,即该变量仅在特定条件下定义。我现在的想法是:忽略变量将成为其中一部分的所有以下代码。

这样的事情可能吗?如果是这样,我将不胜感激获得一些关键字来寻找!非常感谢你!