Contents
- template 設計 interface 要特別小心
initializer_list,variadic template 是更好的選項 - 設計 ctor 時,要考慮
(){}的行為是否一樣 - 使用
{}來當作預設初始化- 優點:
- 可以避免 narrowing convertion
- 避免
()造成和 function 宣告語意重疊的問題 - uncopyable object 可以用此初始化,例如
std::atomic<int> ai1{ 0 };
- 注意:
- 不能使用
auto var{1, 2, 3}; - 當參數有
initializer_list,預設會使用initializer_list,例如: Widget 的 ctor 有Widget(std::initializer_list<long double> il);和Widget(int i, bool b);,如果呼叫Widget w2{10, true};,會強制轉型使用前者的 ctor - 如果 ctor 有
initializer_list,但會造成 narrowing convertion (int 或 float 轉 bool),則會 compile error - 如果 ctor 有
initializer_list,但無法轉型 (int 轉 string),則會考慮其他非initializer_list的 ctor - 當使用
Widget w{};是呼叫 default ctorWidget (); - 必要時還是需要
()初始化,例如vector<int> v(10,10);
- 不能使用
- 優點:
Комментарии