C++面试 使用别名alias,而不使用typedef的原因

  • typedef不支持模版化,而别名(alias)支持模版化
  • template<typename T>
    using MyAllocList = std::list<T, MyAlloc<T>>;
    
    // 只能指定具体的类型std::unordered_map<std::string, std::string>
    typedef std::unique_ptr<std::unordered_map<std::string, std::string>> UPtrMapSS;
    
    
    • C++14提供了所有替换C++11类型提取模版
    std::remove_const<T>::type // C++11: const T → T
    std::remove_const_t<T> // C++14 equivalent
    std::remove_reference<T>::type // C++11: T&/T&& → T
    std::remove_reference_t<T> // C++14 equivalent
    std::add_lvalue_reference<T>::type // C++11: T → T&
    std::add_lvalue_reference_t<T> // C++14 equivalent
    
    
    • 使用alias,可以不使用typename来标识dependent type
    template<typename T>
    struct MyAllocList {
        typedef std::list<T, MyAlloc<T>> type; // type属于dependent type,因为它依赖于T
    };
    
    template<typename T>
    class Widget {
    private:
        typename MyAllocList<T>::type list; // 必须使用typename,因为在模版里用到了type,它属于dependent type
    };
    
    // 使用alias,省去了typename的使用
    template<typename T>
    using MyAllocList = std::list<T, MyAlloc<T>>;
    
    template<typename T>
    class Widget {
    private:
        MyAllocList<T> list;
    };
    
    
    #C++##面试##求职##我的实习求职记录##我的求职思考#
    全部评论

    相关推荐

    双非坐过牢:非佬,可以啊10.28笔试,11.06评估11.11,11.12两面,11.19oc➕offer
    点赞 评论 收藏
    分享
    2 2 评论
    分享
    牛客网
    牛客企业服务