美文网首页
effective modern C++笔记 第二章

effective modern C++笔记 第二章

作者: lypxhxjj | 来源:发表于2018-09-15 11:28 被阅读0次

    1. auto类型推导与模板类型推导的相同点

    template<class T>
    void func(ParamType param);
    
    func(expr);
    
    Type x = expr;
    

    Type类型在包含auto的时候,本质上Type和ParamType是一样一样的,而auto就对应着模板类型T。
    由上一小节可以推断出:

    //auto&在识别类型的时候,auto为等号右边对象的类型去掉&;
    const int y = 1;
    const int& z = y;
    auto& x = y;        //x为const int&,auto为const int;
    auto& x = z;        //x为const int&,auto为const int;
    
    //auto&&在识别类型的时候,符合引用折叠类型
    int y = 10;
    auto&& x = y;      //x为int&, auto为int&;
    auto&& x = 27;    //x为int&&, auto为int&&;
    
    //same as  array,func
    

    2. auto类型推导与模板类型推导的不同点

    使用括号表达式来赋值的时候,auto推导与模板推导表现不同

    1. 赋值表达式的几种方式:
    int x = 10;
    int x(10);            //区分于函数声明,括号内为常量;
    int x = {10};
    int x{10};
    
    1. 不同点:
      使用括号赋值法(包含大括号和小括号)表现行为不同:模板类型参数无法识别括号赋值法;auto会识别类型为std::initializer_list<int>
      auto能识别的要求也是括号内的变量类型是一致的。(毕竟std::initializer_list是一个模板类型)

    2. C++14的不同点
      C++14引用了auto可以作为普通函数的返回值,也可以作为lamdba表达式的函数形参,此时的auto类型推导是和模板类型推导完全一致的:无法识别括号表达式初始化

    相关文章

      网友评论

          本文标题:effective modern C++笔记 第二章

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