比較C++數組元素引用的兩種形式a[0]與0[a]
(轉載請注明來源于金慶的專欄)
對于一個數組ar,求其最外層的維數。
C語言當中慣用的是 sizeof(ar) / sizeof(ar[0]),
可是在stlsoft庫中是 sizeof(ar) / sizeof(0[ar])。
以前從沒見過數組元素引用使用這樣的形式:0[ar],能行嗎?
ar[0]與0[ar]效果是一樣的,其實是求地址,但是為什么用0[ar]呢?
生僻的用法降低了可讀性。是不是有什么優點呢?
都是編譯期計算,應該沒有性能上的差別。
后來翻看了《Imperfect C++》一書,找到了這樣做的原因。
0[ar]保證輸入的ar是一個數組,而不是一個定義了operator []() 運算符的類實例。
例如ar是一個std::map時,C語言中的慣用法會得出錯誤的結果,
但是用0[ar]這樣的形式,會編譯出錯,防止用戶錯誤的使用。
(轉載請注明來源于金慶的專欄)
對于一個數組ar,求其最外層的維數。
C語言當中慣用的是 sizeof(ar) / sizeof(ar[0]),
可是在stlsoft庫中是 sizeof(ar) / sizeof(0[ar])。
以前從沒見過數組元素引用使用這樣的形式:0[ar],能行嗎?
ar[0]與0[ar]效果是一樣的,其實是求地址,但是為什么用0[ar]呢?
生僻的用法降低了可讀性。是不是有什么優點呢?
都是編譯期計算,應該沒有性能上的差別。
后來翻看了《Imperfect C++》一書,找到了這樣做的原因。
0[ar]保證輸入的ar是一個數組,而不是一個定義了operator []() 運算符的類實例。
例如ar是一個std::map時,C語言中的慣用法會得出錯誤的結果,
但是用0[ar]這樣的形式,會編譯出錯,防止用戶錯誤的使用。