c 型別轉換

2021-10-04 08:50:35 字數 3022 閱讀 8427

bool型別的賦值給bool型別,初始值為0則結果為false,否則為truebool賦值給非bool得時候,初始值為false則結果為0,為true則結果為1把浮點數賦值給整型,結果值僅保留浮點樹中小數點之前的部分(整數部分)。注意可能因為整型位數不夠而變成負數

把整型賦值給浮點數,如果整型超過了浮點數的位數限制,精度可能損失

賦值給無符號型別乙個超過它表示範圍的值時,結果是對初始值對無符號型別表示數值總數取數取模後的餘數。

賦值給帶符號型別乙個超出它表示範圍的值時,結果是未定義的

bool值進行關係運算的時候,也會轉換成0或者1隱式轉換發生的條件

大多數表示式當中,比int型別小的整型值首先提公升為較大的整數型別

條件中,非布林值轉換成bool型別

初始化的初始值轉換成變數的型別。賦值語句右側轉換成左側

算術運算或者關係運算的運算物件有多種型別,需要轉換成同一種型別

函式呼叫發生的型別轉換

初始化過程中,初始值轉換成變數的型別,賦值語句中,右側物件轉換成左側運算物件的型別

算術或者關係運算有多種型別,需要轉換成同一種型別

函式呼叫發生型別轉換

算數轉換

整型提公升

char32_t a = 0xffffffff;

char32_t b = -0xffffffff;

// c是unsigned int

auto c = a - b;

// d是unsigned int

auto d = a + b;

無符號型別的運算物件

指標轉換

0nullptr可以轉換成任意型別的指標

任何非常量的指標能轉換成void*,任意物件的指標可以轉換成const void*。有繼承關係的型別之間還有另一種指標轉換方式

編譯器每次只能執行一種型別的轉換,如果同時提出多個轉換請求,這些請求將被拒絕

陣列用作decltype關鍵字的引數,或者作為取位址符號&sizeof以及typeid等運算子的運算物件時,不會發生到指標的轉換。或者使用陣列的引用來初始化陣列的時候也不會發生

// arrref引用arr

int (&arrref)[10]=arr;

強制型別轉換

格式cast-name(expression)type表示轉換的目標型別而expression表示要轉換的值。如果type是引用型別,則結果是左值。

cast-namestatic_castdynamic_castconst_castreinterpret_cast中的一種

static_cast,只要具有明確定義的型別轉換(不能包含底層const)都可以使用static_cast。顯示型別轉換不會給出精度丟失warn

不能包含底層const的原因如下

static_cast(x)的語義差不多是這樣的:以x為引數構造乙個t型別的返回值,這個轉型的過程必需是在編譯期可以確定的。

如果有const int x=10

static_cast(x)是正確的,因為你可以從乙個const int構造乙個int

static_cast也是正確的,因為你可以依據const int獲得乙個const int &

static_cast是不正確的,因為你不能從const int獲得乙個int &,此時必需用const_cast

可以從const char *正常構造乙個std::string,因為std::string有這麼乙個建構函式。

但不能從const char *構造乙個int,只能得到乙個const int

const_cast只能改變運算物件的底層const,並且不能改變型別

const char *pc;

// 正確,但是通過p寫值是未定義行為

char *p=const_cast(pc);

reinterpret_cast為運算物件的位模式提供低層次上的重新解釋

int *ip;

// 這時候pc會把其內容當作字串來解釋

char *pc=reinterpret_cast(ip);

舊式強制型別轉換。具有上述三種強制轉換的功能

// 函式形式的強制型別轉換

type (expr);

// c語言風格的強制型別轉換

(type) expr;

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.當在...