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);
- 不能使用
- 優點:
Комментарии