C++第01課 C++與C的區別(六)
阿新 • • 發佈:2021-09-03
1.型別推斷
int Max(int a, int b) { return a > b ? a : b; } //錯誤,沒有推斷依據 //auto Max(auto a, auto b) //{ // return a > b ? a : b; //} int main() { //常量 auto pInt = 1; //表示式 int x = 0; int y = 1; auto z = x + y; //函式指標 auto pMax = Max; cout << pMax(1, 3) << endl;//獲取推斷型別,也就是整個表示式就是我們的型別 decltype(x + y) b = x + y; //decltype(x+y)得到的int,即b的型別為int //列印型別,型別萃取 cout << typeid(Max).name() << endl; //型別為 int __cdecl(int,int) return 0; }
2.C++中const
C++中對const要求嚴格。const在定義時必須初始化且變數不能被修改。
int main() { //以下為等效寫法 const int a = 10;int const b = 10; //以下兩種也等效 const int* pa = &a; //修飾的是指標所指向記憶體中儲存的資料型別是不可修改的 pa = &b; int const* paa = &a; //修飾指標 int a_num = 101; int* const pac = &a_num; //pac++; 錯誤,const修飾了pac,不可修改 return 0; }
3.C++型別轉換
int main() { //C語言方式 int a = (int)1;//C++最樸素的轉換方式 int aa = int(1.11); //不樸素的方式 /*const_cast 去掉const屬性 static_cast 一般資料型別轉換 reinterpret_cast 指標型別轉換,一般把空型別指標轉為其他型別指標 dynamic_cast 多型*/ int x = 0; const int* p = &x; //*p=1001 錯誤,p所指記憶體中儲存的資料被const修飾 //int* pconst = p; 錯誤 int* pp = const_cast<int*>(p); //等效c語言強轉 int*pp=(int*) p; *pp = 1001; //*p=1001 錯誤 int num = static_cast<int>(1.11); int g_num = 1001; void* pVoid = &g_num; int* pInt = reinterpret_cast<int*>(pVoid); cout << *pInt << endl; return 0; }