型別轉換很重要,這有助於理解c++的工作細節,可以分為自動型別轉換和強制型別轉換
①將一種算術型別的值賦值給另一種算術型別的變數時,c++對值進行轉換
②表示式中包含不同的型別時,c++對值進行轉換
③將引數傳遞給函式時,c++將對值進行轉換
④當類定義了特殊的函式的時候,類的物件可能會轉換成基本型別,基本型別可能會轉換為物件。
c++中的基本型別之間有時會會進行自動轉換,我們稱之為標準轉換,但是由」小「轉「大」是沒有問題的,但是反過來就有可能出現下面問題:
#include
using
std::cout;
using
std::endl;
using
std::ios_base;
bool print(void );
int main()
輸出結果:
tree=3.000000
guess=2147483647
debt=7
分為兩種
1、整型提公升
bool,char,unsigned char ,signed char,short,將會被轉換為int。這種轉換叫做整型提公升(integer promotion)。因為在計算機中整型是最討cpu喜歡的,所以在表示式中小於整型的型別會被轉換成整型來進行運算,這樣會比較塊
tips:
c++編譯器進行整型提公升是的前提是保證資料不會丟失的。例如short 比int短時,unsigned shor 轉換為int,如果相同,unsigned shor會轉換為unsigned int。
2、不同型別之間的轉換
(1)如果有乙個運算元是long double,則將另乙個運算元轉換為 long double
(2)否則,如果有乙個運算元是double,則將另乙個運算元轉換為 double
(3)否則,如果有乙個運算元是float,則將另乙個運算元轉換為 float
(4)否則,說明運算元都是整型,因此執行整型提公升
(4)這種情況下 如果兩個運算元都是有符號或無符號,其中乙個運算元的級別比另乙個低,則轉換為級別高的
(5)如果有乙個運算元是有符號的,另乙個運算元轉換為 無符號,且無符號運算元的級別比有符號運算元高,則將有符號數轉換為無符號運算元所屬的型別
(6)否則,如果有符號數可以表示無符號數的所有取值則將無符號數轉換為有符號運算元所屬的型別
(7)否則,將兩個運算元轉換為有符號型別的無符號版本
上面的的級別就是資料型別的容量。總結一句化就是,如果兩個運算元不一樣,就幫小的哪個轉換為大的哪個型別
函式引數的自動轉換我們分為兩種情況討論
1、對於基本型別的引數函式,如
void f(int ,int);
上面的的函式接受什麼型別的引數呢。還記的上面說的標準轉換和整型提公升嗎。只要滿足它們兩都是可以被接受的。但是要注意標準轉換帶來的不安全性。如下
f(double,int);//不安全
f(short,short);//ok,安全
f(bool.bool);//ok,安全
f(long,long)//不安全
2、而對於指標和引用等,就完全不一樣了
void f1(int & ,int &);
//或者
void f2(int *,int*)
上面的函式接受的實參型別就要非常嚴格了。比如你不能把乙個指向或者引用乙個double/short的值傳遞進去。但是你卻可以把int的型別的變數賦值給f1,把乙個一維int陣列複製給f2。這就要說到完全匹配的概念了
從實參到形參
type
type&
type&
type
type
type*
type(argument-list)
type(*)(argument-list)
type
const type
type
volatile type
type*
const type*
type*
volatile type*
上面的表列出了所有的完全匹配,曲中type 表示任意型別,而type(argument-list)表示函式特徵,而完全匹配就是」等價「的意思,例如,比那在引數淚飆中編譯器不區分 int &和 int,int|int*。
下面兩種方式都是正確的。
(typename) value;//來自c
typename(value);//看起來更像函式
①static_cast
②const_cast
③dynamic_cast
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.當在...