问题标签 [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 是否更改函数的签名?
我需要在我的函数中使用默认值创建一个可选参数。目前签名看起来像这样:
该函数的行为方式如下:
问题是:如果我删除可选参数的显式初始化,如下所示:
然后看起来函数的签名发生了变化
这让我对std::optional
首先的目的感到非常困惑。如果不创建可选参数有什么好处?
c++ - 使用 std::optional 传递 std::vector通过引用到功能
我不清楚通过引用将可选的整数向量传递给函数的正确代码是否是:
或者
非常感谢任何帮助。
c++ - constexpr std::可选重置
我正在查看 C++-17std::optional
类模板的接口,并注意到reset
and assignment
fromnullopt
没有标记为 constexpr。
这是疏忽还是有原因不能将此操作标记为 constexpr?
stdoptional - 我找不到 std::option 有用的地方
我在这个链接中找到了上面的代码,它告诉这个例子 std::option 非常适合!
我在下面创建了另一个没有可选的,我发现它比使用std::option
.
我认为第二个版本更具可读性,因为不需要使用std::nullopt
那么,为什么我们需要在一般情况下特别是在这种情况下使用 optional 呢?
c++ - C++:如何在 std::optional 上初始化和调用方法?
让我们考虑这段代码
如果部分,我该如何避免?有没有办法通过调用一种方法在一行中编写函数体?
c++ - 优化从向量中查找元素的代码
我有以下代码,它试图从 myPairs 中找到一个元素,它是 MyPair 的 std::vector。代码工作正常,但我觉得它可以更优雅。有谁能给点建议,谢谢。
c++ - 为什么 std::optional 不允许“移动构造和仅复制分配”类型的移动分配?
该标准要求optional
...的移动赋值运算符
is_move_constructible_v<T>
[...] 除非为真且为真,否则不应参与重载决议is_move_assignable_v<T>
。
lhs = rhs;
可选值的分配
- 销毁
lhs
(如果bool(lhs) && !bool(rhs)
) lhs
从rhs
(if )构造!bool(lhs) && bool(rhs)
或- 分配
rhs
给lhs
(如果bool(lhs) && bool(rhs)
)。
因此,可以选择为 的移动分配设置两组先决条件optional
:
is_move_constructible_v<T> && is_move_assignable_v<T>
is_move_constructible_v<T> && is_copy_assignable_v<T>
第二种形式可以使用复制赋值 ifbool(lhs) && bool(rhs)
但移动构造 if !bool(lhs) && bool(rhs)
。
对于以下两类类型,我认为当前的一组先决条件存在一个公认的相当人为的问题:
即使构造是赋值操作的一部分,一个不可移动赋值但可复制赋值、可移动构造和可复制构造的类型不能从赋值时的移动构造中受益。将
optional
选择复制赋值运算符并复制构造或复制赋值。一个既不能复制构造也不能移动赋值但移动构造和复制赋值的类型根本不能被赋值。
这是在标准化过程中考虑过的事情optional
吗?或者是否有任何理由不考虑或放弃它?
(免责声明:我知道如果为真is_move_assignable
则通常is_copy_assignable
为真,除非明确删除移动赋值运算符。)
c++ - 返回 std::nullopt 作为非常量引用
从学术角度来看,如果我想将 std::nullopt 作为非常量引用返回。我将如何做同样的事情。
一点背景知识,今天当我在处理返回 std::optional> 引用的代码时,但我忘记将返回值设为常量,我得到了错误。
只是想知道是否有人想使用 std::optional 返回非常量引用,他将如何这样做。
使用平台:Windows 10 Pro x64
开发环境:Visual Studios 15.9.9
c++ - 为什么 std::optional operator* 没有 has_value() 的调试模式断言?
我完全理解,由于性能原因,operator*
instd::optional
不会对包含值的实际存在进行任何检查。然而,在调试模式下,性能考虑应该无关紧要,在调试模式下应该做出某种断言对我来说很有意义。
Visual Studio 似乎没有这样的断言(尽管我不确定其他编译器)。
我的问题是:编译器不会在调试模式下做出这样的断言,或者它只是一个缺失的特性,有什么根本原因吗?
c++ - 什么时候适合使用 std::optional
我想知道这是否会被认为是 std::optional 的有效用法。我有一个返回process_id
(std::uint32_t
值) 的std::uint32_t
函数,如果我们找不到目标进程 ID 或者返回 std::optional 更合适,那么使用返回 0 的标准 " " 函数会更有效吗?
例子:
我在返回一个 unique_ptr 时也这样做,而不是只返回一个 nullptr,但我不确定这是否会被视为对所述功能的“滥用”,以及是否最好只返回 0 并检查该值. 先感谢您。