1、強制型別轉換
在實際工程中幾乎是不可避免的,為此c++將強制型別轉換分為4種不同的型別,以提供更加安全可靠的轉換。
強制型別轉換
說 明static_cast
用於基本型別之間、有繼承關係的類物件之間、類指標之間的轉換
不能用於基本型別指標之間的轉換
const_cast
用於去除變數的唯讀屬性
強制轉換的目標型別必須是指標或引用
reinterpret_cast
用於指標型別之間、整數和指標型別之間的轉換
dynamic_cast
用於有繼承關係的類指標之間、有交叉關係的類指標之間的轉換
具有型別檢查的功能
需要虛函式的支援
c++提供的4種強制型別轉換以關鍵字的方式出現,使用語法為:***_cast(expression)
。
2、字元與數字之間相互轉換#include void static_cast_demo()
void const_cast_demo()
void reinterpret_cast_demo()
void dynamic_cast_demo()
int main()
atoi、atof、atol、atoll等c++11標準函式將字串轉換成int、double、long、long long等
strtol、strtod、strtof、strtoll、strtold 函式將字串轉換成int、double、float、long long、long double等
其中atof函式使用例程如下:
strtol、strtod、strtof、strtoll、strtold 函式使用例程:/* atof example: sine calculator */
#include /* printf, fgets */
#include /* atof */
#include /* sin */
int main ()
enter degrees: 45
the sine of 45.000000 degrees is 0.707101
long strtol(const char * str,char ** str_end,int base);
long strtol(const char * restrict str,char ** restrict str_end,int base);
long long strtoll(const char * restrict str,char ** restrict str_end,int base);
str指向要解釋的以空字元結尾的位元組字串,str_end指向的指標設定為指向經過最後解釋的字元的字元。
其中引數base的範圍為2~36,和0,它決定了字串以被轉換為整數的權值,可以被轉換的合法字元依據base而定。當base為2時合法字元為『0』,『1』;base為8時合法字元為『0』,『1』,……『7』;base為10時合法字元為『0』,『1』,……『9』;base 為16時合法字元為『0』,『1』,……『9』,『a』,……『f』;base為24時合法字元為『0』,……『9』,『a』,……『n』,base為36時,合法字元為『0』,……『9』,『a』,……『z』。
float strtof(const char * restrict str,char ** restrict str_end);#include #include int main()
輸出:數字(無符號長整數)是 2030300
字串部分是 | this is test|
double strtod(const char * str,char ** str_end);
double strtod(const char * restrict str,char ** restrict str_end);
long double strtold(const char * restrict str,char ** restrict str_end);
#include #include #include int main(void)
printf("%f\n", f);
}}parsing '111.11 -2.22 nan nan(2) inf 0x1.bc70a3d70a3d7p+6 1.18973e+4932zzz':
'111.11' -> 111.110000
' -2.22' -> -2.220000
' nan' -> nan
' nan(2)' -> nan
' inf' -> inf
' 0x1.bc70a3d70a3d7p+6' -> 111.110000
' 1.18973e+4932' -> range error, got inf
// %.*s 其中的.*表示顯示的精度 對字串輸出(s)型別來說就是寬度/* strtof example */
#include /* printf, null */
#include /* strtof */
int main ()
輸出:f1 = 686.969971
f1 = 365.239990
one martian year takes 1.88 earth years.
// 這個*代表的值由後面的引數列表中的整數型(int)值給出
// 例如:
printf("%.*s\n", 1, "abc"); // 輸出a
printf("%.*s\n", 2, "abc"); // 輸出ab
printf("%.*s\n", 3, "abc"); // 輸出abc >3是一樣的效果 因為輸出型別type = s,遇到'\0'會結束
3、把數字轉換成字串string,to_string函式
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);
除了#include // std::cout
#include // std::string, std::to_string
int main ()
執行結果:
pi is 3.141593
28 is a perfect number
to_string函式外
sprintf 最常見的應用之一莫過於把整數列印到字串中,所以spritnf 在大多數場合可以替代itoa例如:
//把整數123 列印成乙個字串儲存在s 中。
sprintf(s, "%d", 123); //產生"123"
可以指定寬度,不足的左邊補空格:
sprintf(s, "%8d%8d", 123, 4567); //產生:" 123 4567"
當然也可以左對齊:
sprintf(s, "%-8d%8d", 123, 4567); //產生:"123 4567"
也可以按照16 進製列印:
sprintf(s, "%8x", 4567); //小寫16 進製,寬度佔8 個位置,右對齊
sprintf(s, "%-8x", 4568); //大寫16 進製,寬度佔8 個位置,左對齊
/* sprintf example */
#include int main ()
[5 plus 3 is 8] is a string 13 chars long
C 自動型別轉換與強制型別轉換的講解
自動型別轉換 隱式型別轉換 這些轉換是 c 預設的以安全方式進行的轉換,不會導致資料丟失。例如,從小的整數型別轉換為大的整數型別,從派生類轉換為基類。轉換規則 從儲存範圍小的型別到儲存範圍大的型別。整數具體規則為 byte short char int long float double 也就是說b...
C 強制型別轉換
四種型別可能很多人都常常忽略就象我一樣,但是有時還是比較有用的。不了解的建議看看,一些機制我也不是十分了解,只是將一些用法寫出來讓大家看看。強制轉化無論從語法還是語意上看,都是c 中最難看的特徵之一。但是基於c風格的轉化的語義的不明確性及其一些潛在問題。強制型別轉化最終還是被c 接受了。1.stat...
C 強制型別轉換
標準c 中主要有四種強制轉換型別運算子 const cast,reinterpret cast,static cast,dynamic cast等等。1 static cast a 將位址a轉換成型別t,t和a必須是指標 引用 算術型別或列舉型別。表示式static cast a a的值轉換為模板中...