最近在寫的乙個**。出現個莫名其妙的編譯問題。
**可以簡化成這樣:
class foo
explicit foo(foo &a)
private:
int m_a;
};int main()
這個**編譯時總是提示 foo b = x; 這一行有問題。報的錯誤還很詭異。用 vs2015 報錯如下。
error: c2440: 「初始化」: 無法從「foo」轉換為「foo」
剛開始一直找不到原因,後來寫了個最小化的測試用例,一點點的加**才發現問題。原來是 explicit foo(foo &a) 這裡多了個 explicit。
這個 explicit 在這裡確實毫無意義,只是我習慣性的在建構函式前加個 explicit 。
刪掉這個 explicit 一切正常了。這點小bug 整了乙個晚上。。。
C 複製建構函式
c 複製建構函式,一般在一下幾種情況中出現 1 物件以值傳遞的方式傳入函式時 2 物件以值傳遞的的方式從函式返回 3 乙個物件通過另乙個物件初始化 4 陣列 根據陣列中的初始化列表初始化陣列的時候。5 容器 初始化順序容器中的元素 有3種情況必須使用複製建構函式 a 如果有資料成員是指標 b 要在建...
C 複製建構函式
1.概念 只有單個形參,而且該形參是對本類型別物件的引用 常用const修飾 2.首先看乙個小例子 h中 class test private int a float b cpp中 int main test test1 5,5.5 test test2 1,1.1 coutcouttest3使用了...
C 複製建構函式
誰知道 include include using namespace std class person 如果兩種方式同時存在,會呼叫沒有const的版本 2.推薦,存在唯一的person person person person 3.不推薦,這個依然是複製建構函式,詭異。與第二種方法存在二義性 p...