std::array 和 boost::array 之间的区别

Differences between std::array and boost::array

本文关键字:array 区别 之间 std boost      更新时间:2023-10-16

boost::array更改为std::array是完全安全的吗?它会导致任何差异吗?

boost::arraystd::array(性能(更好吗?

std::array<T,N>boost::array<T,N>是标准的布局聚合,只包含一个T[N]数组。

它们与namespace boostnamespace std的交互可能不同(具体来说,ADL会找到std用于std::array的函数,以及用于boost::arrayboost函数(。

所以,如果boost中有一个函数foo,如果some_array来自boost,则调用foo(some_array)可能会起作用,如果它来自std则不然。

目前std中唯一的容器算法是std::beginstd::end(如果包括近未来的算法,则类似的新算法size empty等(。 范围 v3(或任何已发布的内容(可能会添加更多内容。

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

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

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

这两者都有点牵强。

最后,std::array具有现代noexcept装饰,而 boost 有一个您可以获得的公共c_array成员(我相信std::array成员变量的名称未指定(。 (通过@Potatoswatter(。 我个人希望std::array在未来得到更好的支持,因为boost::array存在主要是因为std缺乏功能。

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