非bool
型別的賦值給bool
型別,初始值為0
則結果為false
,否則為true
把bool
賦值給非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;
無符號型別的運算物件
指標轉換
0
和nullptr
可以轉換成任意型別的指標
任何非常量的指標能轉換成void*
,任意物件的指標可以轉換成const void*
。有繼承關係的型別之間還有另一種指標轉換方式
編譯器每次只能執行一種型別的轉換,如果同時提出多個轉換請求,這些請求將被拒絕
陣列用作decltype
關鍵字的引數,或者作為取位址符號&
,sizeof
以及typeid
等運算子的運算物件時,不會發生到指標的轉換。或者使用陣列的引用來初始化陣列的時候也不會發生
// arrref引用arr
int (&arrref)[10]=arr;
強制型別轉換
格式cast-name(expression)
type
表示轉換的目標型別而expression
表示要轉換的值。如果type
是引用型別,則結果是左值。
cast-name
是static_cast
,dynamic_cast
,const_cast
和reinterpret_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.當在...