→ Caesar08: 要提供begin, end,不然就是C形式的array 05/12 20:19
→ Caesar08: 你要standard的話,N4582, 6.5.4就有了 05/12 20:22
→ wtchen: 看起來這個end是來自邊界檢查? 05/12 20:24
→ Caesar08: 我想先知道甚麼是邊界檢查 05/12 20:26
→ wtchen: 確定寫入的地方是不是該變數的有效範圍? 05/12 20:27
→ wtchen: "C/C++ 為了執行效率,並不會自動檢查陣列索引值是否超過" 05/12 20:29
→ wtchen: 這是13誡-2裡的描述... 05/12 20:29
→ Caesar08: range-based for取出的object,都是能被合法存取的 05/12 20:31
→ Caesar08: 那條指的難道不是像vector<int> vec; 05/12 20:33
→ Caesar08: copy(begin(vec),begin(vec)+1);這種的嗎? 05/12 20:33
→ Caesar08: 在[begin,end)裡面的object,都是安全的。range-based 05/12 20:34
→ Caesar08: for也是基於這些而建立的 05/12 20:34
→ wtchen: array也可以用range-based for 05/12 20:34
→ wtchen: 這種不先檢查陣列索引值是要怎麼做range-based for? 05/12 20:35
→ bibo9901: 就是begin(arr) 和 end(arr) 之間呀 05/12 20:37
→ Caesar08: 對於C形式的array,只要你知道這個array大小是多少, 05/12 20:42
→ Caesar08: range-based for就會幫你設定大小 05/12 20:42
→ Caesar08: 簡單來說,用range-based for取出來的object絕對安全 05/12 20:43
→ Caesar08: 不管你是array,或是有提供"正確"begin, end的class 05/12 20:44
→ wtchen: range-base for應該不能用在用引數傳入的pointer吧? 05/12 20:44
→ wtchen: 例如 int a(int* b){裏面應該不能對b用range-based for} 05/12 20:45
→ Caesar08: 只接受"array"與有begin, end的class...... 05/12 20:47
→ wtchen: array還要有known size而且不是incomplete type... 05/12 20:49
推 kwpn: end遇到array會是template T* end(T(&array)[N])之類 05/12 21:00
→ LPH66: (2) 那個即是給陣列用的, 型式如樓上所言 05/12 21:10
→ LPH66: 也就是要有 N 才能傳得進這裡去, 不然會被 SFINAE 掉 05/12 21:11
→ wtchen: 這樣我就懂了,原來有這個template... 05/12 21:11