前言
此筆記目前尚未整理完成,如需學習完整內容可參考隨附的 reference,或自行 google 搜尋
但因為作者要整理的筆記太多,如果想早點看到整理後的文章,可以下方留言「期待整理」之類的… 我會努力找時間優先整理!
explicit
先認識顯性轉換 (implicit) 與隱性轉換 (explicit)
經常使用於 constructor 前面
- direct constructor
Class myclass(123);
- copy constructor
Class myclass = 123;
問題出在「=」這個符號有太多意思,有非常高的可能不小心混用。
「=」可能代表:
- assign?
- constructor?
- copy constructor?
type conversion?
void foo(char a);
void foo(int a);
foo(3);
請問,有沒有可能偷偷地把 7 轉型成 char ‘7’ 來使用呢?
有時候太過聰明可能就會有這個煩惱呢…
不論有沒有可能,我們應該都要避免這件事情「有可能造成混淆」,
在加上對於「其他人閱讀的可讀性」來說,這也是非常重要的。
使用 explicit constructor
使用 explicit constructor,我們可以禁用 copy initialize,一方面避免「=」的混淆,
另外一方面,我們可以更確保有被轉型成我們要的 type。