C 中的轉換建構函式

2022-08-18 10:24:11 字數 2406 閱讀 4023

1,型別轉換函式主要功能就是做型別轉換,型別轉換是將乙個資料從 a 型別轉換  到 b 型別,有隱式型別轉換和強制型別轉換兩種;

2,再論型別轉換:

1,標準資料型別之間會進行隱式的型別安全轉換;

1,c 語言編譯器只會在標準資料型別之間做轉換,並且 c 編譯器內建了些規則,遵循這些規則標準資料間可以進行隱式型別轉換;

2,轉換規則如下:

1,char( ==> short)==> int ==> unsigned int ==> long ==>  unsigned long ==> float ==> double;

2,小型別轉換到大型別是允許的,因為這樣是安全的,且不會有警告;

3,有趣的隱式型別轉換例項分析:

1,main.cpp 檔案:

1 #include 2 #include 34

using

namespace

std;56

intmain()721

else

2225

26 cout << "

sizeof(s + 'b') =

"<< sizeof(s + '

b') << endl; //

編譯器將兩個運算元都轉換為 int 型別,編譯器這樣做的原因是因為編譯器認為 4 個位元組的運算是最高效的,編譯器自認為安全、高效;

2728

return0;

29 }

2,輸出結果:

1 d = -2000

2 ui = 1000

3 ui + i = 4294966296

4positive

5sizeof(s + '

b') = 4

4,寫**時要盡量的避免隱式型別轉換;

3,問題: 

1,普通型別與類型別之間能否進行型別轉換?類型別之間能否進行型別轉換?

2,普通型別到類型別轉換程式設計實驗:

1,main.cpp 檔案:

1 #include 2 #include 34

using

namespace

std;56

class

test714

15explicit test(int

i)16

1920 test operator + (const test&p)

2126

27int

value()

2831

};32

33int

main()

34

4,再論建構函式:

1,建構函式可以定義不同型別的引數;

2,引數滿足下列條件時稱為轉換建構函式:

1,有且僅有乙個引數;

1,這個引數型別只要不是自己當前型別就可以;

2,引數是基本型別;

3,引數是其它類型別;

5,另個一視角,舊式的 c 方式強制型別轉換:

1,**示例:

1

inti;

2test t;

34 i = int(1.5

);5 t = test(100); //

將整型數 100 強制型別轉換到 test 類型別,本質是呼叫建構函式;

6,編譯器的行為:

1,編譯器會盡力嘗試讓原始碼通過編譯;

2,編譯器盡力嘗試的結果是隱式型別轉換:

1,隱式型別轉換:

1,會讓程式以意想不到的方式進行工作;

2,是工程中 bug 的重要**;

3,工程中通過 explicit 關鍵字杜絕編譯器的轉換嘗試;

1,explicit,顯示的;

4,轉換建構函式被 explicti 修飾時只能進行顯示轉換;

1,顯示轉換方式:

1,static_cast(value);

1,這裡有呼叫轉換建構函式;

2,classname(value);  // c++ 角度是手工呼叫建構函式;

1,這裡有呼叫轉換建構函式,實質就是呼叫建構函式;

3,(classname)value;  // c++ 中不推薦;

1,這裡有呼叫轉換建構函式;

7,小結:

1,轉換建構函式只有乙個引數;

2,轉換建構函式的引數型別是其他型別;

3,轉換建構函式在型別轉換時被呼叫;

1,無論是顯示的還是隱式的,都會被呼叫;

4,隱式型別轉換是工程中 bug 的重要**;

5,explicit 關鍵字用於杜絕隱式型別轉換;

1,如果不是故意的,更改;

2,如果想要故意的,手動顯示型別轉換;

C 轉換建構函式和轉換函式

1 轉換建構函式的作用 作用 將某種型別轉換為類型別 例如有下面的 base int a 轉換建構函式 base b 物件 b 12 解析 程式將使用建構函式base int a 構造出乙個臨時的無名base物件,並用12對其初始化。然後採用逐個成員賦值的方式將該臨時物件的內容賦值給物件b。這一過程...

C 剖析 轉換建構函式

參考自 狄泰 c 深度解析 我們知道在標準的資料型別之間是有隱式轉換的,轉換關係如下 這是 c語言和 c 裡的轉換關係,我們這裡主要談論c 總所周知c 相比c語言有了乙個類的概念,類中有建構函式,而當建構函式具有以下特點時會成為轉換建構函式 有且只有乙個引數 引數是基本資料型別 引數不是自身類的型別...

c 型別轉換建構函式

定義轉換建構函式的目的是實現型別的自動轉換。只有乙個引數,而且不是複製建構函式的建構函式,一般 就可以看作是轉換建構函式。當需要的時候,編譯系統會自動呼叫轉換建構函式,建立 乙個無名的臨時物件 或臨時變數 include using namespace std class complex compl...