问题标签 [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 与值进行比较?
能够比较 astd::optional<T>
与的相等性是非常有用的T
:
我认为这种情况下的行为定义明确且清晰。
我不明白为什么允许这样做:
我期待这甚至无法编译。我认为这里发生的事情非常模糊。甚至将其添加到STL的原因是什么?
c++ - 为什么`std::optional::operator=` 当 T 包含 `const` 数据成员时删除?
以下代码会导致编译器错误:
例如,在 gcc 上,错误显示为:
在 MSVC 上,作为另一个示例,错误显示为:
只要我们删除const
关键字 in const A a;
,错误就会消失。根据std::optional 上的引用标准,在某些情况下 = 运算符的某些重载将被删除,具体取决于 std::is_...able_v 测试。在这种情况下,为什么const
关键字会影响其中一些测试?
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
使用第二次重载的示例。
c++ - 在分支数据结构的另一个可选元素中使用 std::optional 模板
我有一个分支的数据结构,主要是由结构和整数构建的。一些元素使用 std::optional 模板签名。在可选结构元素的情况下,在另一个结构中,它本身也在另一个结构中作为可选引用,我得到错误:
Error (active) E0135 class "BasicContent" has no member "km"
这是产生此错误的代码:
奇怪的是,我可以运行代码并写入所有数据,但它一直显示这个错误。同样在手表中,“km”显示为 nullopt,但一切都很好。有没有解决方案,或者有什么我看不到的?
c++ - std::optional 成员是否连续存储?
我想我对如何存储可选值感到有些困惑。在构造包含std::optional<T>
成员的类或结构时,这些成员是连续存储在内存中还是可选动态分配?例如,下面的结构会是一个连续的内存块吗?
c++ - 在这个简单的例子中,为什么 std::optional 的赋值运算符不能在编译时上下文中使用?
在使用 Compiler Explorer(以及在 std::optional 上阅读 cppref.com)半小时后,我放弃了。除了我不明白为什么这段代码不能编译之外,没什么可说的。有人请解释一下,如果有的话,也许给我一个解决方法?std::optional
我在这里使用的所有成员函数都是constexpr
,并且确实应该在编译时可计算,因为这里的可选类型 - size_t
- 是原始标量类型。
c++ - std::optional 构造函数中 in_place_t 背后的动机
我试图更好地理解构造函数背后in_place_t
的动机。std::optional<T>
我得到用例来消除使用默认构造函数构建null
可选与类型的歧义。T
但是,如果为std::optional
构造函数指定了一个或多个参数,那么不能假设它们总是可以转发给构造函数T
吗?
c++ - 将自动模板参数与 std::optional 结合,可能吗?
我真的很喜欢 C++17 的自动模板参数,因为我不必为了使用非类型模板参数(例如带有转发参数的函数)而跳槽。
但这让我开始思考,std::optional
在转发函数没有有效结果的情况下,是否可以将它与其他类型(例如 )结合使用。例如:
目前这有几个问题:
这是一个玩具示例,但我希望有一些东西可以作为函数/调用的装饰器,这些函数/调用可能有助于一些通用的异常处理、清理和/或日志记录。
我愿意接受替代方案,std::optional
只要有一种方法可以传达呼叫无法完成,因此不会返回任何结果。
c++ - 标准::可选:: 可以忽略变量的后续出现吗?
我是 C++ 的初学者,所以我的问题可能很幼稚。例如,在运行时我决定使用 std::optional 初始化一个变量,即该变量仅在特定条件下定义。我现在的想法是:忽略变量将成为其中一部分的所有以下代码。
这样的事情可能吗?如果是这样,我将不胜感激获得一些关键字来寻找!非常感谢你!