问题标签 [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::vector 和 std::array 之间的性能, n> 存储少量数据?
我有一个 2D 环境,我想在其中获取摩尔附近的一些单元格(东、西、北和东单元格)。有时一个单元格只能有 3 或 2 个邻居(如果我们从边界或网格的一角检查)。
在此之上,我想区分没有边界的情况(环面世界,上升的东西再次出现......)。在这种情况下,每个单元格恰好有 4 个邻居。
因此,我制作了该算法的 2 个版本,一个使用 std::vector 坐标,另一个使用 std::array 可选坐标(我将坐标称为一对短整数)。见下文 :
带有成对向量的版本
带有可选对数组的版本
我必须多次执行此操作,而且我不想因为执行不当而自取其辱。一个选择比另一个更好还是我绝对错了,还有另一种有效的方法?
c++ - 如何向上转换静态 std::optional
我正在尝试返回一个实例,但它的基础类型为 std::optional 。如果我试图传递相同的引用,我还应该返回 std::optional& 或 std::optional<Base&> 吗?
c++ - 如何在 C++11 中用 boost::optional 重写?
如何在 C++11 中重写以下代码以使用boost::optional
or ?boost::none
c++ - 将一个 std::optional 转换为另一个 std::optional
我有一个返回可选结构的方法,如下所示:
我想在另一个返回可选作者的方法中调用此方法。问题是实现应该始终检查 getBook 返回的可选项是否在调用方法之前填写,如下所示:
有没有办法以更短的方式编写它,以便如果填充了可选项,则调用该方法,但如果可选项为空,std::nullopt
则返回。像这样的东西(我知道这目前不起作用,但你明白我的意思):
c++ - g ++编译到目标文件时跳过函数
解决这个问题可能是微不足道的,但我找不到。我试图用谷歌搜索它,但没有运气。
我正在使用 Linux 上的 g++ 开发一个 C++ 项目(gcc 版本 10.1.0 Ubuntu 10.1.0-2ubuntu1-18.04)。
g++ 将 C++ 文件编译为对象 .o 而不引发任何错误,但最终的对象文件缺少一个函数!我写的其他8个库文件都编译和链接很好,只有这个给我带来了麻烦。为什么,我该如何解决?
库头文件bpo_interface.h为:
bpo_interface.cpp:_
用于编译文件的g++ 命令:
以及objdump -t -C bin/build/bpo_interface.o的输出:
与 objdump 结果一致,链接器抱怨它找不到 ic_bpo::get() 函数 - 具体来说:
如果我将函数体复制并粘贴到定义文件 bpo_interface.h 中并从项目中删除 bpo_interface.cpp 和 bpo_interface.o,一切正常。
所以我猜 g++ 在编译时完全能够处理该函数并将其声明与其在项目中的使用相匹配。
但是为什么没有编译成 bpo_interface.o 目标文件呢?
谢谢
c++ - 构造 std::optional来自 std::option
此代码被拒绝:
但这是被接受的:
这里发生了什么?
c++ - 在 C++ 中解压缩可选项是否有不那么冗长的习语?
在我目前正在进行的项目中,我发现自己编写了很多如下所示的代码,其中get_optional_foo
返回一个 std::optional :
如果我得到一个空选项,我想退出该功能;否则,我想为该值分配一个非可选变量。我已经开始使用使用maybe_
前缀命名可选的约定,但我想知道是否有某种方法可以做到这一点,这样我就不需要为可选的临时使用?此变量仅用于检查空选项并在有值时取消引用。
c++ - 创建对象时如何使用 std::optional 进行错误处理而不立即破坏它们?
错误处理是 C++ 构造函数中的一个挑战。有几种常见的方法,但它们都有明显的缺点。例如,抛出异常可能会导致构造函数中更早分配的资源泄漏,使其成为一种容易出错的方法。使用静态init()
方法是另一种常见的解决方案,但它违反了 RAII 原则。
研究这个主题,我发现这个答案和博客建议使用名为 的 C++17 功能std::optional<>
,我发现它很有希望。然而,这种解决方案似乎有一个潜在的问题——当用户检索到对象时,它会立即触发析构函数。
这是一个描述问题的简单代码示例,我的代码基于上述来源
该程序的输出将是:
a->_buf
尝试删除两次时出现运行时错误(至少在 Visual C++ 环境中) 。
cout
为了读者的方便,我发现这个问题调试了一个非常复杂的代码,但问题很清楚 - 中的语句return
构造A::make()
对象,但由于它是A::make()
范围的结尾 - 调用了析构函数。用户确定他的对象已初始化(注意我们是如何得到"OK"
消息的),而实际上它已被销毁,并且当我们超出if()
范围时main
,a->~A()
再次调用。
那么,我做错了吗?在构造函数中使用std::optional
for 错误处理很常见,至少有人告诉过我。提前致谢
c++ - C++ 范围像 Java 流一样查找并返回 std::optional
在 Java 中,Stream.findFirst()
返回Optional<T>
. 我想对std::ranges::find()
. 如果未找到该值,则返回last
迭代器。如果T
是一个结构,这很不方便,我试图从中取出一个成员。这是一个演示代码:
当然,我可以在每个周围放置一些包装器代码find
来转换迭代器,但这会使代码变得如此冗长和样板式。我想知道 C++20 中是否有一些更惯用的方式来做到这一点?