问题标签 [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++ - 是否可以将对象设置为空?
在我的代码中,我检查对象是否为空/空。
有没有办法将对象设置为空?
performance - std::optional 的开销?
现在std::experimental::optional已被接受(或即将被接受),我想知道当以下运算符获取内部值时生成的程序集的开销和后果是什么:
与没有的情况相比std::optional
。它对于计算密集型程序可能特别重要。
例如,与 astd::vector<std::experimental::optional<double>>
相比,a上的操作开销的数量级是std::vector<double>
多少?
c++ - std 可选:没有这样的文件或目录
我尝试使用不同的编译器(包括 gcc 6.1)编译以下程序:
输出是
main.cpp:1:20:致命错误:可选:没有这样的文件或目录#include 可选
对于此处给出的示例,这甚至是正确的:http: //en.cppreference.com/w/cpp/utility/optional/optional
任何线索为什么?
c++ - 在 C++17 中,可以使用带有初始值设定项的 if 语句来解压可选项吗?
我正在使用 std::optional 编写一些代码,并且想知道 C++17 的“带有初始化程序的 if 语句”是否能够帮助解包值?
我在这里编写功能 Unpack :
但是,我的问题是。C++17 'if statement with initializer' 在这里有帮助吗?如果是这样,它将如何编码?
更新,这实际上主要是使用 optional 时的一个问题,这非常容易误用,因为 optional 和 *optional 都返回布尔值,并且当有人尝试访问该值并忘记 *.
c++ - 如何在 C++ 中使用 std::optional ?
我正在尝试使用 std::optional 但我的代码引发错误。
我已经指定#include <experimental/optional>
和编译器选项是-std=c++1z
, -lc++experimental
。
如何使用std::experimental::optional
?
以下是代码:
错误信息:
操作系统:macOS 10.12.5
编译器版本:
c++ - 为什么 const rvalue 限定 std::optional::value() 返回 const rvalue 引用?
std::optional::value()
有以下两个重载
返回 const 右值引用有什么意义?
我能想到的唯一原因是使编译器能够在(真的很奇怪)情况下帮助捕获未定义的行为,如下所示
如果std::optional::value()
已经返回 aconst T&
那么上面的代码将编译并在以后使用时会导致未定义的行为r
reference_wrapper
。
上面返回 a 是否还有其他极端情况const T&&
?
c++ - clang-4.0 和 std::optional 支持
根据 clang 的 C++-1z status page,我相信 4.0 应该支持 C++17 std::optional
。
但是我无法让它工作。看这个简单的例子:
尝试以各种方式编译它,都失败了:
(仅此一点有点奇怪,因为错误提到添加 -std=c++17 但事实证明标志的名称是 c++1z 并且没有 c++17:)
无论如何,让我们继续:
最后一次尝试:
铿锵信息:
难道我做错了什么?
c++ - C++ 是否在 std::min 和 std::max 下标准化 std::optional 的行为?
我没有安装最新的编译器来暗示最终的std::optional
语义将是什么。但在 C++14 中,以下内容:
不编译。现在,在未来,我希望/希望z
会3
在这种情况下得到解决;如果oy = oint{}
那时 z
可以得到2
。
是像我期望的那样在 C++17 中标准化,还是稍后提出标准化?或者,不可定义性是否标准化(就像它在 C++14 中一样)?
注意:这里的动机可能是我自己为 C++17 之前的代码实现一些东西;如果计划将相关的东西标准化,我会尝试与之匹配。
c++ - std::optional 和 boost::optional 是否尊重托管对象的对齐限制?
如果一个类T
有对齐要求,例如由alignas
关键字指定的,是否std::optional<T>
保证boost::optional<T>
遵守所述对齐?
如果它们只是T
object 和 a 的包装类bool initialized
,那么它们会根据需要自动对齐其T
成员,但标准和 boost 文档指出它们不能容纳任何对象并且可以很好地处理构造对象的成本。据我了解,它们不只是包含一个T
. 相反,他们似乎分配了一个缓冲区,在该缓冲区上T
手动构建或销毁。因此,C++ 语言不会自动对齐缓冲区,因为它不是T
.
那么,std::optional<T>
是否boost::optional<T>
正确对齐他们的托管T
对象?他们是否也提供optional<T>::operator new
并optional<T>::operator new[]
尊重对齐要求?