C 複製建構函式不能用 explicit 修飾

2021-08-02 14:58:15 字數 478 閱讀 7340

最近在寫的乙個**。出現個莫名其妙的編譯問題。

**可以簡化成這樣:

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...