2016-02-03 146 views

回答

4

std::array<T,N>boost::array<T,N>是除T[N]之外不包含任何內容的標準佈局集合。

及其與namespace boostnamespace std相互作用可以是不同的(即,ADL會發現std::arrayboost::arraystd功能,並且boost函數)。

所以,如果有一個函數fooboost,呼籲foo(some_array)可能的工作,如果some_array來自boost,而不是如果它是從std

唯一的容器算法目前在stdstd::beginstd::end(以及類似的新的sizeempty等如果包括近未來的)。範圍v3(或任何獲得發佈)可能會增加更多。

boost中有比std更多的容器算法。其中一些可能無法建立。

在最壞的情況下,有人能寫出具有相同的名稱作爲boost容器算法,與自變量的函數,可以隱式地從std::array轉換,並且該函數的非限定調用可能會導致轉換更改後變量類型,而之前它稱爲boost容器算法。

同樣,有人可以編寫明確檢查模板參數是否爲boost::array的代碼,並且如果它的行爲不同。

這兩個都是有點延伸。

最後,std::array擁有現代化noexcept裝飾,提升了公共c_array會員,您可以得到(名稱std::array成員變量時,我相信,沒有指定)。 (通過@Patatoswatter)。我個人認爲std::array今後會有更好的支持,因爲boost::array主要存在,因爲std缺乏功能。

除了那些角落案件,std::array應該是一個直接替換。

+1

好吧......如果你比較這些類,那麼更多的差異是顯而易見的。 'std'擁有現代化的'noexcept'裝飾,Boost擁有'c_array'成員。 – Potatoswatter

相關問題