Pitfalls
Uniform Initialization 代表通用,不管在哪裡使用都是對的。所以盡量使用 braced initialization。
braced initialization 還可以 prohibits implicit narrowing conversions among built-in types,考慮以下的例子:
不過使用 braced initialization 要小心,尤其是在 class 的 constructor 中有牽涉到 std::initializer_list
時,因為 compiler 除非真的沒辦法(無法做 conversion),要不然都會優先選擇去 match 有 std::initializer_list
的 constructor,然後才會考慮一般的 overload resolution 規則。 考慮以下例子:
what to compiler sees:
而且,braced initialization 如上所說,會幫我們做 narrowing conversion 的檢查:
真的沒辦法做 conversion 的 case:
Braced Initialization on Vector
V 是一個 size = 2 的 vector,而 V2 size = 20。