问题标签 [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++ - C++17 std::optional 错误:“auto”之前的预期主表达式
我正在尝试使用 C++17 功能std::optional
可选的返回类型是std::optional<std::pair<int, int>>
. 我在
sum_pair
函数中调用print_answer
函数并想要一个可选的打印。
在print_answer
函数中,我想检查所需的对是否包含要显示的内容。就像在给出的示例中一样:可选返回工厂函数可用作 while 和 if 的条件
以下是代码:这是有错误的
当我使用if-else
以下格式的语句时
我收到以下两个错误。(使用 GCC 7.1)
有人可以解释一下,为什么我需要使用 if-else,而不是“operator”??
c++ - std::optional::value_or() - 惰性参数评估
std::optional::value_or(expr)
是否可以以懒惰的方式评估参数,所以expr
仅在没有价值的情况下计算?
如果不是,什么是合适的替代品?
c++ - 可以将函数应用于 std::optional 的值,取回一个可选值吗?
我认为将函数应用于可选项是一种非常有用的模式。然而,使用 C++ STL 很麻烦。例如:
C ++中是否有等效于haskellfmap
或rust的?Option::map
类似于以下内容:
c++ - std::optional 实现为 union vs char[]/aligned_storage
在阅读 GCC 的实现时,std::optional
我注意到了一些有趣的事情。我知道boost::optional
实现如下:
但是libstdc++和libc++(和Abseil)都像这样实现它们的optional
类型:
在我看来,它们在功能上是相同的,但是使用其中一个有什么优势吗?(除了后者明显缺乏新的位置,这真的很好。)
c++ - '_HAS_CXX17' 宏是否可用于自定义项目标头以启用 C++17 语言集功能?
我想创建使用标准 C++ 中的“可选”的标头。但是,我的标头将引用自 Visual Studio 2015 以及 Visual Studio 2017 项目。
我想要一些东西,例如对于 Visual Studio 2017(具有 C++ 17 语言功能集),使用 std::optional 并且对于 Visual Studio 2015,使用 boost::optional。
我在想这样的事情:
以这种方式使用“_HAS_CXX17”宏可以吗?有没有更好的方法来做到这一点?
c++ - C++17:使用 std::optional 来评估枚举是否包含值
我想在编译时检查各种枚举是否包含给定的值,所以我写了以下内容:
使用 Visual Studio 2017(版本 15.8.6),代码编译成功,输出中没有错误。但是,错误窗口显示
和
关于为什么会这样的任何提示?我可以忽略 E0028,但如果可能的话,我不希望这样做。
编辑:从 from_int 中删除 static_assert 不会改变错误。
c++ - 引用 std::whatever 或 not_yet_in_std::whatever 的惯用方式是什么?
我喜欢跨度,所以我gsl::span
在这里和那里使用。但是 - 在 C++20 中,它将std::span
改为*。我使用std::optional
,但对于 C++14 代码,它需要是std::experimental::optional
. 等等。
在这些变体(有时可能超过两个)之间进行编译时选择的惯用且面向未来的方法是什么,以便我的实际代码可以只使用一个标记序列,该标记序列编译为正确选择跨度,或可选,或其他类似的构造?
注意:我想避免污染全局命名空间。
* 好吧,从技术上讲,我也可以gsl::span
稍后使用,但这个问题的想法是在标准可用时使用标准中的内容,并在此之前使用最接近的替代方案。
c++ - C++ 标准是否允许 std::optional无需开销即可实施
我刚刚看了 cppcon 谈论 Bloomberg datum,变体类型使用 IEEE754 格式的冗余来编码存储在 datum 中的类型。
所以我想知道 C++ 标准是否允许实现通过使用相同的技巧更有效地实现 std::optional 。
请注意,这需要有时存储在 optional 中的 double 的二进制表示与传递给构造函数的 double 的二进制表示不匹配。
注意:我关心标准是否允许这样做,我知道大多数/所有实现都不会打扰。
我知道 IEEE754 不是标准强制要求的,但它是允许的并且可以通过实现进行检查。
c++ - 在 g++ v8.2.0 中使用 std::experimental::optional
曾经被称为std::experimental::optional
现在std::optional
在 C++17 中被称为的东西。
但是一些库——例如 libpqxx——还没有被更新以删除experimental
命名空间。
因此,现在使用 g++ v8.2.0 附带的新版本 Ubuntu 18.10,尝试编译使用 libpqxx 的项目会导致如下错误:
是否有某种标志我可以传递给 g++ 以便它定义旧的experimental
命名空间?
这些是 Ubuntu 18.10 中的相关版本号:
c++ - 为什么访问空的 std::optional 时没有 throw 或 sigsegv?
这个例子:
实际上这个程序打印了一些 int (类型的未初始化值int
)。此外,libcxx 使用 assert-check 来访问非参与值。
为什么标准在这里不需要 throwing 或 sigsegv?