c++提供了四種強制型別轉換:
強制轉換型別
功能備註
static_cast
非多型型別的轉換,不能用於兩個不相關型別的轉換,比如不能用於整型和整型指標之間轉換
1.基本型別之間的轉換
2.空型別指標到其他型別指標的轉換
3.子類和父類之間的換磚
4.任何型別轉換乘void型別
reinterpret_cast
把一種型別轉換成另一種不相關的型別,比如整型與整型指標的轉換
const_cast
刪除變數的const屬性,方便再次賦值
被定義為const的變數,編譯器會對其優化,在暫存器中訪問,預設不能改變
dynamic_cast
父類物件的指標轉換成子類物件的指標或引用
1.只能用於含有虛函式的類
2.會在轉換時先檢查能否轉換成功,不能轉換會返回0,保證**安全
具體使用如下:
voidtest_static_cast()
voidtest_reinterpret_cast()
voidtest_const_cast()//子類轉換成父類,直接=即可,稱為向上轉型
//父類轉換成子類,需要使用dynamic_cast進行安全轉換,稱為向下轉型
class b:publicaintb;
};void fun(a*p)
else
}voidtest_dynamic_cast()
常用到的字串有cstring,std::string,char* ,const char*,tchar等,它們之間的轉換如下:
使用cstring::format()實現,其它型別,int/double/float等都是用此函式轉換成cstring。
//第一種方式:
cstring str;
uses_conversion;
std::
string s(w2a(str));//
僅unicode字符集下使用
//第二種方式:
cstring str ;
std::
string s = (ct2a)str;
//第一種方式
cstring str;
const
char*chstr;
char
temp[max_path];
::wsprintfa(temp,
"%ls
",(lpctstr)str);//
unicode字符集下不可用
chstr =temp;
//第二種方式
cstring str;
uses_conversion;
std::
string s(w2a(str));//
僅unicode字符集下使用
const
char* cstr =s.c_str();
//第三種方式
cstring str;
char* ch = ct2a(str);
stringstr;
char* ch =str.data();
//或者
char* ch = str.c_str();
char*ch;string str = ch;
_tcscpy();
數字型別 ---> 字串char* : itoa gcvt等等函式
數字型別 ---> 字串string :使用std::to_string()
字串char* ---> 數字型別 :atoi atol atof strtod strtol strtoul wcstol wcstoul等等函式
字串string -- -> 數字型別 : 使用c標準庫函式:atoi strtoul等;或者使用c++標準庫函式(c++11) stoi stol stoul stoll stof stod等
資料型別 型別轉換
這樣的語句將報錯,因為char型別精度低於int型別,編譯器無法將其自動轉換,只能進行強制轉換 int x 65 char ch char x 舉例1 int age 19 char 女 char result age int 不可以自動轉換成char 精度損失 舉例2 int a 10 int b...
Objective C資料型別 資料型別轉換
資料型別 1.objective c資料型別可以分為 基本資料型別 物件資料型別和id型別。2.基本資料型別有 int float double和char型別。3.物件型別就是類或協議所宣告的指標型別,例如 nsautoreleasepool pool 其中,nsautoreleasepool是乙個...
資料型別轉換
資料型別轉換 public class typeconvert 一 容量小的資料型別自動轉換為容量大的資料型別 資料型別按容量大小排序為 byte,short,char int long float double byte,short,char之間不會互相轉換,他們三者在計算時首先回轉換為int型別...