這兩者有什麼區別?當你需要一個固定大小的常量值數組時,你更喜歡哪一個?const boost :: array <T,N>或boost :: array <const T,N>?
const boost::array<int, 2> x = {0, 1};
boost::array<const int, 2> y = {0, 1};
謝謝。
這兩者有什麼區別?當你需要一個固定大小的常量值數組時,你更喜歡哪一個?const boost :: array <T,N>或boost :: array <const T,N>?
const boost::array<int, 2> x = {0, 1};
boost::array<const int, 2> y = {0, 1};
謝謝。
第二個將阻止你將它複製到一個新的非const陣列
boost::array<const int, 2> y = {0, 1};
boost::array<int, 2> y1 = y; // error!
因爲我期望的工作,我可能會用第一個選項去。將第二個傳遞給期望boost::array<T, N>
的模板將阻止這些模板修改其參數(即使它是副本)。第一個將「正常工作」,因爲參數的類型爲boost::array<int, 2>
。
A const int
和int
在這方面是幾乎相同的。你無法對array<int,2>
做任何事,你無法做到array<const int, 2>
。如果不是int
你有一些課程,那麼會有區別。與array<const MyClass, 2>
你將無法調用數組元素的非const方法。
const array<MyClass, 2>
更強,你不能修改任何東西。您不能調用元素和的非const方法,您不能通過替換元素來改變陣列本身,比如使用operator[]
。
您無法通過其他選擇下的operator []'來替換元素。 – Potatoswatter 2011-04-09 09:19:54
這真的是一種風格上的差異。
如果您嘗試在const array
上調用assign
,則編譯器錯誤表示沒有匹配的函數。如果您對array<const T>
也這樣做,則會指向assign
內的無效操作。
我認爲const array
表示意圖更好,看起來更像是相應的C風格的數組聲明。但是我不會努力改變一些東西,例如在遺留代碼中或在可能生成array<const T>
的模板中。
我會去** const array **。謝謝。 – pic11 2011-04-09 09:53:17
謝謝!順便說一句,爲什麼通過值忽略const限定符?參數類型演繹是如何工作的? – pic11 2011-04-09 12:45:22
@pic是。它認爲這是一件好事。請參閱http://cpp-next.com/archive/2011/04/appearing-and-disappearing-consts-in-c/ – 2011-04-09 12:50:50
Schaub上的評論。是的,它非常有意義。感謝您的鏈接。 – pic11 2011-04-09 12:55:08