C++ 类型声明

作者: 乐百川 | 来源:发表于2017-08-17 22:17 被阅读35次

    类型别名

    typedef关键字

    typedef关键字是继承自C语言的特性,利用它我们可以为一个类型起别名,一般用于将复杂类型简化。举个简单的例子,将int类型定义为integer类型,之后就可以在代码中使用integer作为类型使用。

    //typedef关键字
    typedef int integer;
    integer i = 5;
    

    别名声明

    C++还新增了另一种声明类型别名的方法,这就是别名声明。

    //别名声明
    using charater = char;
    charater c = 'c';
    

    auto关键字

    使用auto关键字可以简话类型声明。当使用auto关键字是,变量的类型由编译器自动推断。

    //auto关键字
    auto number = 100;//number是int
    auto pnumber = &number;//pnumber是int*
    

    由于编译器需要根据给定的初始值判断变量的类型,所以auto类型的变量必须初始化。而且如果在一行声明多个变量,那么这些变量的类型必须相同。

    auto ca = 'a', cb = 'b';
    

    如果使用常量来初始化auto变量,那么编译器会忽略顶层const,保留底层const。所以在下面的例子中,auto变量和原变量的类型并不完全相同。

    //忽略顶层const,保留底层const
    const int cn = 100;
    const int* pn = &cn;
    auto cn2 = cn;//int
    auto pn2 = pn;//const int*
    

    decltype关键字

    有时候可能需要根据表达式的类型来决定要使用的类型,在这种情况下可以使用C++新增的decltype关键字。在下面的例子中,由于decltype中的表达式类型不同,所以声明的变量的类型也不同。

    //decltype关键字
    decltype(5 + 5) n1;//int
    decltype(5 + 5.0) n2;//double
    

    decltype关键字可以接受的表达式类型很广泛,甚至可以接受函数作为表达式,这时候会将函数的返回值类型作为要使用的类型,注意编译器不会真的调用这个函数,仅仅是分析它的返回值而已。如果表达式是一个引用,那么获得的类型就是严格的这个引用的类型,包括顶层和底层const在内。

    特别要注意的一点是,如果表达式本身使用括号包括,那么这其实是一个引用类型,所以这时候的变量必须初始化。

    //必须初始化
    decltype((n2)) n3 = n2;//int&
    

    相关文章

      网友评论

        本文标题:C++ 类型声明

        本文链接:https://www.haomeiwen.com/subject/zqmwrxtx.html