<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
標準資料型別之間會進行隱式的型別安全轉換
轉換規則如下:
下面來看一個有趣的隱式型別轉換:
#include <iostream> #include <string> using namespace std; int main() { short s = 'a'; unsigned int ui = 1000; int i = -2000; double d = i; cout << "d = " << d << endl; cout << "ui = " << ui << endl; cout << "ui + i = " << ui + i << endl; if( (ui + i) > 0 ) { cout << "Positive" << endl; } else { cout << "Negative" << endl; } cout << "sizeof(s + 'b') = " << sizeof(s + 'b') << endl; return 0; }
輸出結果如下:
ui 為 unsigned int 型別,i 為 int 型別,將兩者進行相加編譯器會進行隱式的型別轉換,全部變成unsigned int 型別,所以最後的執行結果是正數。
s 和 'b 編譯器都被編譯器轉換成 int 型別,因為 int 型別的運算是最高效的。
普通型別與類型別之間能否進行型別轉換?類型別之間能否進行型別轉換?
建構函式可以定義不同型別的引數
引數滿足下列條件時稱為轉換建構函式
舊式的 C 方式強制型別轉換
編譯器會盡力嘗試讓原始碼通過編譯
編譯器盡力嘗試的結果是隱式型別轉換
隱式型別轉換
會讓程式以意想不到的方式進行工作
是工程中 bug 的重要來源
工程中通過 explicit 關鍵字杜絕編譯器的轉換嘗試
轉換建構函式被 explicit 修飾時只能進行顯示轉換
轉換方式
下面來看一個普通型別向類型別的轉換:
#include <iostream> #include <string> using namespace std; class Test { int mValue; public: Test() { mValue = 0; } explicit Test(int i) { mValue = i; } Test operator + (const Test& p) { Test ret(mValue + p.mValue); return ret; } int value() { return mValue; } }; int main() { Test t; t = static_cast<Test>(5); // t = Test(5); Test r; r = t + static_cast<Test>(10); // r = t + Test(10); cout << r.value() << endl; return 0; }
輸出結果如下:
類型別是否能夠型別轉換到普通型別?
C++ 類中可以定義型別轉換函數
型別轉換函數用於將類物件轉換為其它型別
語法規則:
下面來看一個型別轉換函數:
#include <iostream> #include <string> using namespace std; class Test { int mValue; public: Test(int i = 0) { mValue = i; } int value() { return mValue; } operator int () { return mValue; } }; int main() { Test t(100); int i = t; cout << "t.value() = " << t.value() << endl; cout << "i = " << i << endl; return 0; }
int i = t; 等價於int i = t.operator int ();
型別轉換函數
編譯器會盡力嘗試讓原始碼通過編譯
下面看類型別之間的轉換:
#include <iostream> #include <string> using namespace std; class Test; class Value { public: Value() { } explicit Value(Test& t) { } }; class Test { int mValue; public: Test(int i = 0) { mValue = i; } int value() { return mValue; } Value toValue() { Value ret; cout << "operator Value()" << endl; return ret; } }; int main() { Test t(100); Value v = t.toValue(); return 0; }
輸出結果如下:
注意型別轉換函數可能與轉換建構函式衝突,所以 explicit Value(Test& t) { } 加了一個 explicit,如果不加,編譯器可能會報錯。
到此這篇關於C++圖文並茂講解型別轉換函數的文章就介紹到這了,更多相關C++類別型轉換函數內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45