41 型別轉換函式

2021-08-19 19:24:31 字數 1467 閱讀 5937

標準資料型別之間會進行隱式的型別安全轉換,規則如下:

char->short->int->unsigned int->long->unsigned long->float->double   小轉大

#include

#include

using namespace std;

int main()

else

cout << "sizeof(s + 'b') = " << sizeof(s + 'b') << endl;      // 將s和『b』都轉化為 int ,列印出4

return 0;

普通型別與類型別之間能否進行型別轉換?類型別之間能否相互轉換?

再論建構函式,

建構函式可以定義不同型別的引數。

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

有且僅有乙個引數,引數是基本型別,或者引數是其他類型別。

舊式的c方式強制型別轉換:  int i;test t;  i=int(5); t=test(100);

編譯器會盡力嘗試讓原始碼通過編譯,teat  t;   t=100;  100這個立即數預設為int型別,怎麼可能賦值給t物件呢,編譯器會看看有沒有轉換建構函式,發現test類中定義了 test(int i),可以進行轉換,預設等價於:t=test(100);

test t; t=5;  // t=test(5); 隱式型別轉換

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

工程中通過 explicit 關鍵字杜絕編譯器的轉換嘗試,轉換建構函式被 explicit 修飾時只能進行顯示轉換,

強制轉換方式:

static_cast(value);  //c++中

classname(value);     //c語言中

(classname)value;     //c語言中,不推薦

#include

#include

using namespace std;

class test

explicit test(int i)           // 杜絕隱式轉換

test operator + (const test& p)

int value()

};int main()

{   

test t;    

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

test r ;    

r = t + static_cast(10);   // r=t+10;   <---->    r = t + test(10);   

cout << r.value() << endl;    

return 0;

static_cast: 基本型別和類型別間轉換

轉換建構函式只有乙個引數,它的引數型別是其它型別,在型別轉換時被呼叫,隱式轉換時bug的重要**,explcit用於杜絕隱式型別轉換。

41 型別轉換函式 上

標準資料型別之間會進行隱式的型別安全轉換 轉換規則如下 char short int unsigned int long unsigned long float double 範例 有趣的隱式型別轉換 include include using namespace std int main int ...

41 型別轉換函式(上)

注 部落格中內容主要來自 狄泰軟體學院 部落格僅當私人筆記使用。測試環境 ubuntu 10.10 gcc版本 9.2.0 一 再論型別轉換 1 標準資料型別之間會進行隱式的型別安全轉換 2 轉換規則如下 實驗分析 有趣的隱式型別轉換 41 1.cpp include include using n...

4 1 型別轉換

影象型別轉換就是把影象從一種型別轉換成另一種型別。opencv提供了200多種型別轉換。我們這次學三個。型別有 cv2.color bgr2gray 彩色影象轉灰度影象 cv2.color bgr2rgb bgr轉rgb cv2.color gray2bgr 灰度轉彩色 使用方法 b cv2.cvt...