C/C++教程

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

 

这篇关于C++第01课 C++与C的区别(六)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!