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 342,輸出結果:using
namespace
std;56
intmain()721
else
2225
26 cout << "
sizeof(s + 'b') =
"<< sizeof(s + '
b') << endl; //
編譯器將兩個運算元都轉換為 int 型別,編譯器這樣做的原因是因為編譯器認為 4 個位元組的運算是最高效的,編譯器自認為安全、高效;
2728
return0;
29 }
1 d = -20004,寫**時要盡量的避免隱式型別轉換;2 ui = 1000
3 ui + i = 4294966296
4positive
5sizeof(s + '
b') = 4
3,問題:
1,普通型別與類型別之間能否進行型別轉換?類型別之間能否進行型別轉換?
2,普通型別到類型別轉換程式設計實驗:
1,main.cpp 檔案:
1 #include 2 #include 344,再論建構函式: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
1,建構函式可以定義不同型別的引數;
2,引數滿足下列條件時稱為轉換建構函式:
1,有且僅有乙個引數;
1,這個引數型別只要不是自己當前型別就可以;
2,引數是基本型別;
3,引數是其它類型別;
5,另個一視角,舊式的 c 方式強制型別轉換:
1,**示例:
16,編譯器的行為:inti;
2test t;
34 i = int(1.5
);5 t = test(100); //
將整型數 100 強制型別轉換到 test 類型別,本質是呼叫建構函式;
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...