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 boost
和 namespace std
的交互可能不同(具体来说,ADL 将为 std::array
找到 std
函数,为 boost::array
).
因此,如果 boost
中有一个函数 foo
,如果 some_array
来自 boost
,则调用 foo(some_array)
可能有效,如果它不是来自 std
.
目前在 std
中唯一的容器算法是 std::begin
和 std::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
应该是一个直接替代品。
把boost::array
改成std::array
就完全安全了吗?它会导致任何差异吗?
boost::array
是否优于 std::array
(性能?)?
std::array<T,N>
和 boost::array<T,N>
是标准布局聚合,仅包含 T[N]
.
它们与 namespace boost
和 namespace std
的交互可能不同(具体来说,ADL 将为 std::array
找到 std
函数,为 boost::array
).
因此,如果 boost
中有一个函数 foo
,如果 some_array
来自 boost
,则调用 foo(some_array)
可能有效,如果它不是来自 std
.
目前在 std
中唯一的容器算法是 std::begin
和 std::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
应该是一个直接替代品。