c 型別轉換

2022-03-30 10:26:49 字數 1309 閱讀 2972

如果兩種型別可以相互轉換,它們就是關聯的。c++語言不會直接將兩種不同型別的值相加,而是先根據型別轉換規則及那個運算物件的型別統一後再求值。

1、隱式轉換

隱式轉換的型別轉換是自動執行的,無須程式設計師介入。在下面的情況下,編譯器會執行隱式轉換:

(1)算術轉換

(1.1)整型提公升

將小整數型別轉換成較大的整數型別,對bool、char、signed char、unsigned char、short和unsigned short等型別來說,只要它們所有可能的值都存在int裡,它們就會提公升成int型,否則提公升成unsigned int型;對較大的char型別(wchart_t、char16_t、char32_t)提公升成int、unsigned int、long、unsigned long、long long和unsigned long long中最小的一種型別,前提是轉換後的型別能容納原型別所有可能的值。

(1.2)轉換規則

算數轉換將運算物件換成最寬的型別,比如表示式中既有整型又有浮點型,運算時會將整型變換成浮點型進行運算。算術運算首先執行整型提公升,如果提公升後的型別一致則不需要進一步的型別轉換,否則要執行型別轉換。如果運算物件符號一致,要麼都是無符號的、要麼都是有符號的,則小型別運算物件轉換成較大型別。否則,符號不一致(含有無符號型別的)的運算則需要注意:

(2)其他轉換

但當陣列被用作decltype關鍵字的引數、取位址符(&)、sizeof、typeid等運算子的運算物件時,轉換不會發生。

char *cp=get_char();

if(cp);//如果指標不是0,為真

if(*cp);//如果指標指向的值不是空字元,為真

int i;

const int &j=i;/非常量轉換成常量的引用

const int *p=&i;//非常量轉換成指向常量的指標

string s="a value";//字串字面值轉換成string型別

while(cin>>s);//cin轉換成bool值

如果建構函式只接受乙個實參,那麼它定義了此類型別的隱式轉換機制,我們稱這種建構函式為轉換建構函式。我們通過乙個實參呼叫的建構函式定義一條從建構函式的引數型別向類型別轉換的規則,需要多個實參的建構函式不能用隱式轉換規則。對只有乙個實參的建構函式新增explicit宣告可以阻止隱式轉換,只能在類內宣告建構函式時使用,在外部定義時不要重複關鍵字。所以使用explicit宣告的建構函式時,只能以直接初始化的形式使用:

c c1("abc");//直接初始化

c c2="abc";//拷貝形式的初始化,會呼叫隱式的轉換建構函式

2、顯式轉換

暫時不看

mysql型別轉換c 型別轉換 C 型別轉換

一 簡介 型別轉換 把資料從一種型別轉換另一種型別 我們要求等號兩邊參與運算子必須型別一致,如果不一致,滿足下列條件會發生自動型別轉換或者隱式型別轉換。1.兩種型別相容 例如 int和double 相容 都是數字型別 2.目標型別大於源型別 double int 顯示型別轉換 1.兩種型別相相容 i...

C 型別轉換

在程式中,進行型別轉換是常見的事。那麼在 c 中支援以前語言的型別轉換方法,即用型別名進行強行轉換,例如 object objtest new newtype newtype newvalue newtype objtest 但是這樣轉換,有個嚴重的問題,就是在把 objtest 強轉換成 newt...

C 型別轉換

型別轉換是將一種型別的值對映為另一種型別的值。型別轉換實際上包含有自動隱含和強制的兩種。型別的自動隱式轉換 c 語言編譯系統提供的內部資料型別的自動隱式轉換規則如下 1.程式在執行算術運算時,低型別可以轉換為高型別。2.在賦值表示式中,右邊表示式的值自動隱式轉換為左邊變數的型別,並賦值給它。3.當在...