std::array 和 boost::array 之间的差异

Differences between std::array and boost::array

boost::array改成std::array就完全安全了吗?它会导致任何差异吗?

boost::array 是否优于 std::array(性能?)?

std::array<T,N>boost::array<T,N> 是标准布局聚合,仅包含 T[N].

数组

它们与 namespace boostnamespace std 的交互可能不同(具体来说,ADL 将为 std::array 找到 std 函数,为 boost::array).

因此,如果 boost 中有一个函数 foo,如果 some_array 来自 boost,则调用 foo(some_array) 可能有效,如果它不是来自 std.

目前在 std 中唯一的容器算法是 std::beginstd::end(如果你包括 near-未来的)。 Ranges v3(或发布的任何内容)可能会添加更多内容。

boost 中的容器算法比 std 中的多。其中一些可能无法构建。

在最坏的情况下,有人可以编写一个与 boost 中的容器算法同名的函数,并带有一个可以从 std::array 隐式转换的参数,以及对该函数的非限定调用函数可能会在您更改变量类型之后导致转换,而在它调用 boost 容器算法之前。

类似地,有人可以编写代码来显式检查模板参数是否为 boost::array,如果是则表现不同。

两者都有点牵强。

最后,std::array 有现代的 noexcept 修饰,boost 有一个 public c_array 成员,你可以在(名称 std::array 成员变量是,我相信,未指定)。 (来自@Potatoswatter)。我个人希望 std::array 能得到更好的支持,因为 boost::array 的存在主要是因为 std 缺乏功能。

除了那些极端情况,std::array 应该是一个直接替代品。