将boost::array
更改为std::array
是完全安全的吗?它会导致任何差异吗?
boost::array
优于std::array
(效果?)?
答案 0 :(得分:5)
std::array<T,N>
和boost::array<T,N>
是标准布局聚合,只包含T[N]
数组。
他们与namespace boost
和namespace std
的互动可能会有所不同(具体来说,ADL会为std
找到std::array
个函数,为{{1}找到boost
个函数}})。
因此,如果boost::array
中有foo
函数,如果boost
来自foo(some_array)
,则调用some_array
可能有效,而如果来自boost
则不然std
。
目前std
中唯一的容器算法是std::begin
和std::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
应该是替代品。