explicit 防止類例項化時隱式轉換

2021-06-01 18:48:32 字數 491 閱讀 8505

今天隨便的看了一下effective c++,結果有個問題我以前根本沒注意,可能很多人也沒注意這個問題

看一下**

#include using namespace std;

class a

int val; };

void dosomething(a obj)

int main()

dosomething()函式需要傳進去的是a類的物件,但我傳了乙個int型別的整數23,結果一樣可以執行,而且輸出的結果是23,

這裡進行了乙個隱式轉化,如果在開發中我們並不希望出現這種問題,怎麼辦?

使用explicit宣告建構函式就可以防止這種問題

只需把建構函式宣告為

explicit a(int i = 0 )

這樣,編譯器編譯時就出錯.....

所以以後寫程式時推薦這種方法宣告建構函式,防止隱式轉化而造成不可預想的結果

C 類例項化時的記憶體分配

初學者在學習物件導向的程式語言時,或多或少的都些疑問,我們寫的 與最終生編譯成的 卻大相徑庭,我們並不知道編譯器在後台做了什麼工作 這些都是由於我們僅停留在語言層的原因,所謂語言層就是教會我們一些基本的語法法則,但不會告訴我們為什麼這麼做?今天和大家談的一點感悟就是我在學習程式設計過程中的一點經驗,...

Verilog例項化時的引數傳遞

類似vhdl的generic語句,verilog也可以在例化時傳遞引數 例子見傳遞的引數是子模組中定義的parameter。傳遞的方法 1 module name parameter1,parameter2 inst name port map 2 module name parameter nam...

類初始化時機

虛擬機器規範中並沒有強制約束何時進行載入,但是規範嚴格規定了有且只有下列五種情況必須對類進行初始化 載入 驗證 準備都會隨之發生 以上 5 種場景中的行為稱為對乙個類進行主動引用。除此之外,所有引用類的方式都不會觸發初始化,稱為被動引用。被動引用的常見例子包括 system.out.println ...