將boost :: array更改爲std :: array是完全安全的嗎?它可以導致任何差異?std :: array和boost :: array之間的區別
boost :: array比std :: array(performance?)更好嗎?
將boost :: array更改爲std :: array是完全安全的嗎?它可以導致任何差異?std :: array和boost :: array之間的區別
boost :: array比std :: array(performance?)更好嗎?
std::array<T,N>
和boost::array<T,N>
是除T[N]
之外不包含任何內容的標準佈局集合。
及其與namespace boost
和namespace std
相互作用可以是不同的(即,ADL會發現std::array
爲boost::array
std
功能,並且boost
函數)。
所以,如果有一個函數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
裝飾,提升了公共c_array
會員,您可以得到(名稱std::array
成員變量時,我相信,沒有指定)。 (通過@Patatoswatter)。我個人認爲std::array
今後會有更好的支持,因爲boost::array
主要存在,因爲std
缺乏功能。
除了那些角落案件,std::array
應該是一個直接替換。
好吧......如果你比較這些類,那麼更多的差異是顯而易見的。 'std'擁有現代化的'noexcept'裝飾,Boost擁有'c_array'成員。 – Potatoswatter