2011-04-09 66 views

回答

6

第二個將阻止你將它複製到一個新的非const陣列

boost::array<const int, 2> y = {0, 1}; 
boost::array<int, 2> y1 = y; // error! 

因爲我期望的工作,我可能會用第一個選項去。將第二個傳遞給期望boost::array<T, N>的模板將阻止這些模板修改其參數(即使它是副本)。第一個將「正常工作」,因爲參數的類型爲boost::array<int, 2>

+0

謝謝!順便說一句,爲什麼通過值忽略const限定符?參數類型演繹是如何工作的? – pic11 2011-04-09 12:45:22

+0

@pic是。它認爲這是一件好事。請參閱http://cpp-next.com/archive/2011/04/appearing-and-disappearing-consts-in-c/ – 2011-04-09 12:50:50

+0

Schaub上的評論。是的,它非常有意義。感謝您的鏈接。 – pic11 2011-04-09 12:55:08

0

A const intint在這方面是幾乎相同的。你無法對array<int,2>做任何事,你無法做到array<const int, 2>。如果不是int你有一些課程,那麼會有區別。與array<const MyClass, 2>你將無法調用數組元素的非const方法。
const array<MyClass, 2>更強,你不能修改任何東西。您不能調用元素的非const方法,您不能通過替換元素來改變陣列本身,比如使用operator[]

+0

您無法通過其他選擇下的operator []'來替換元素。 – Potatoswatter 2011-04-09 09:19:54

2

這真的是一種風格上的差異。

如果您嘗試在const array上調用assign,則編譯器錯誤表示沒有匹配的函數。如果您對array<const T>也這樣做,則會指向assign內的無效操作。

我認爲const array表示意圖更好,看起來更像是相應的C風格的數組聲明。但是我不會努力改變一些東西,例如在遺留代碼中或在可能生成array<const T>的模板中。

+0

我會去** const array **。謝謝。 – pic11 2011-04-09 09:53:17

相關問題