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

时间:2016-02-03 15:15:10

标签: c++ arrays c++11 boost std

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

boost::array优于std::array(效果?)?

1 个答案:

答案 0 :(得分:5)

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

他们与namespace boostnamespace std的互动可能会有所不同(具体来说,ADL会为std找到std::array个函数,为{{1}找到boost个函数}})。

因此,如果boost::array中有foo函数,如果boost来自foo(some_array),则调用some_array可能有效,而如果来自boost则不然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应该是替代品。