1. 程式人生 > 其它 >C++第01課 C++與C的區別(六)

C++第01課 C++與C的區別(六)

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; }