问题标签 [boost-optional]

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.

0 投票
1 回答
4619 浏览

c++ - boost optional 和 std::experimental 可选赋值之间的区别

通常当一个函数返回时,boost::optional我看到很多人返回一个空括号{}来指定一个空值,它工作正常并且比返回短boost::none

我试图做一些类似于 empty a 的事情boost::optional<int>,但是当在右侧使用空括号调用复制赋值运算符(或者很可能是移动赋值操作)时,空括号被转换为 int 然后将该值分配给可选的,所以我最终将变量设置为 0 而不是我期望的空值。这是一个示例https://godbolt.org/g/HiF92v,如果我尝试相同的操作,std::experimental::optional我会得到我期望的结果(只需在示例中替换为 std::experimental::optional ,您就会看到说明变成mov eax, eax)。

此外,如果我尝试为 boost 可选(非整数类型)使用不同的模板参数,则某些编译器会编译(具有我期望的行为,此处为http://cpp.sh/5j7n的示例)而其他编译器则不会。因此,即使对于相同的库,行为也会根据模板 arg 有所不同。

我想了解这里发生了什么,我知道这与我将 C++14 功能用于设计中没有考虑到这一点的库这一事实有关。我阅读了boost/optional标题,但我迷失了细节,我还尝试研究编译后的代码,而不用内联类似的结果。

我正在使用带有 -std=c++14 和 boost 1.57 的 gcc 4.9.2。

顺便说一句:我知道我应该使用boost::optional::resetor boost::none,但我试图与代码库其余部分的语义保持一致。

0 投票
2 回答
7040 浏览

c++ - 使用 std::optional 参数调用函数

我有一个函数,其签名是:

(在正式可用std::experimental::optional之前,我一直在使用别名。)std::optional

但是,我很难干净地调用它。编译器将拒绝执行两次隐式转换(const char*std::stringstd::optional<std::string>)以使用原始 C 字符串文字调用它。我可以这样做:

编译器会认为 astd::optional是必需的,并进行转换。但是,这太冗长了。感谢 C++11,我也可以这样做:

虽然这样更好,但仍然不理想。我希望能够像其他任何需要std::string. 这可能吗?让函数采用另一种参数类型是可以的,只要它的行为类似于/可以直接转换为std::optional. 谢谢。

0 投票
1 回答
756 浏览

c++ - 可选的通过引用传递对象到函数

我对一个只需要一个参数的函数有很多调用,我不想更新这些调用。但是我想从其他一些特殊的地方调用该函数,但在这种情况下,它应该另外填充一个向量,我将传递一些数据。

我知道我可以创建一个带有NULL指向std::vector容器的指针的默认参数,然后,如果它为空,则跳过执行任何额外的操作,如果它是一个有效的指针 - 将数据收集到vector. 但是我想尝试使用boost::optional.

请看下面的代码。它可以编译并且可以工作,但是这种方法很好还是我不应该这样做并更好地使用原始指针?

0 投票
4 回答
404 浏览

c++ - 可以选配实现为 8 字节对象?

是否可以实现 std::optional 以便sizeof(std::optional<double>) == 8通过某种方式使用它可以将字符存储在 NAN 中,请参见http://en.cppreference.com/w/cpp/numeric/math/nan?有没有这样做的实现?可以根据标准中可用的功能来完成吗?

0 投票
2 回答
1041 浏览

c++11 - 如何使用 boost::optional 返回 char 数组

我尝试使用 boost::optional 返回简单数组

我收到以下错误:

我该如何处理这种混乱?

0 投票
1 回答
666 浏览

c++ - 类中可选常量引用的初始化

我有两个类,A 和 B。A 类是对给定向量执行变换的变换(矩阵)。

B类有两个成员;std::vector<double> &vec一个向量的引用,以及const std::vector<std::shared_ptr<A> > &a_ptrs另一个向量的常量引用,该向量包含 A 类的共享指针,表示不同的转换。a_ptrs可能包含零个、一个或多个转换。B 类的工作之一是将这些(如果有的话)转换应用于 vector vec

为此,如您所见,我重载了 B 类的构造函数。当const std::vector<std::shared_ptr<A> > &a_ptrs作为参数传递给 B 的构造函数时,一切都很好。但我的问题是,我根本不知道如何在有零个或只有一个转换可用的情况下初始化这个常量引用,即a_ptrs分别为空或只有一个元素。

如果a_ptrs只有一个元素,我希望能够传递 a ,并以此为基础进行 const std::shared_ptr<A> &aptr初始化。a_ptrs

我也不想在 B 类中复制指向 A 类的共享指针。我也希望对共享指针有一个常量引用。

根据我在互联网上的发现,有可能使用boost::optionalor std::experimental::optional,但我无法使其工作。

我对 c++ 很陌生,我已经在这个问题上工作了两天,没有任何运气。我该如何克服这个问题?我应该有另一种设计策略吗?我将不胜感激任何有助于我解决此问题的意见或建议。

0 投票
2 回答
713 浏览

c++ - std::optional 和 boost::optional 是否尊重托管对象的对齐限制?

如果一个类T有对齐要求,例如由alignas关键字指定的,是否std::optional<T>保证boost::optional<T>遵守所述对齐?

如果它们只是Tobject 和 a 的包装类bool initialized,那么它们会根据需要自动对齐其T成员,但标准和 boost 文档指出它们不能容纳任何对象并且可以很好地处理构造对象的成本。据我了解,它们不只是包含一个T. 相反,他们似乎分配了一个缓冲区,在该缓冲区上T手动构建或销毁。因此,C++ 语言不会自动对齐缓冲区,因为它不是T.

那么,std::optional<T>是否boost::optional<T>正确对齐他们的托管T对象?他们是否也提供optional<T>::operator newoptional<T>::operator new[]尊重对齐要求?

0 投票
1 回答
628 浏览

c++ - 暴露 boost::optional通过 Boost.Python 作为内部参考或无

我正在通过 Boost.Python 公开我的 C++ 类。我的目的是公开具有内部引用的用户定义类类型的成员变量。在我决定引入 boost::optional<T> 类型的成员变量之前,这一直很好。

有几篇很棒的文章展示了如何将 boost::optional<T> 公开为按值返回。具体来说,我已经实现了这个转换器。我的代码的其他相关部分如下所示:

我试图return_value_policy<return_by_value>()return_value_policy<reference_existing_object>()or替换return_internal_reference<>()。两者都产生了 Python TypeError:

我的理解是,我现在得到了对 boost::optional<T> 对象的引用。但是,我注册的转换器没有被调用,因为它需要一个 boost::optional<T> 对象而不是对此类对象的引用。我想过更换转换器,但我是新手,我真的不知道怎么做。有什么建议么?

0 投票
1 回答
114 浏览

c++ - 在 Android Studio 中进行原生调试时查看 boost::optional 内容

我只在 2.3.3 工作室尝试过。没试过新的3.0

  • 还没有找到任何可以帮助的插件
  • 试图在 lldb 控制台中投射。那里有一些错误,不知道如何正确执行

那么,有什么解决办法吗?你如何处理这样的问题?

0 投票
1 回答
467 浏览

c++ - c++ 中的可选引用会保留对象生命吗?

说我有:

在上面,没有理由期望打印出一致的结果,对吧,realCat因为}? 还是optional保存生命realCat