美文网首页
C/C++ 一些重要基础

C/C++ 一些重要基础

作者: helinyu | 来源:发表于2022-02-14 15:32 被阅读0次

    constexpr 关键字
    参考地址


    slowpath & fastpath

    #define fastpath(x) (__builtin_expect(bool(x), 1))
    #define slowpath(x) (__builtin_expect(bool(x), 0))
    

    __builtin_expect():long __buildin_expect(long exp, long c);
    __builtin_expect 是GCC(version>=2.96)提供给程序员使用的,由于大部分程序在分支预测方面做得很糟糕,所以GCC提供了这个内建函数来帮助程序员处理分支预测,目的是将“分支转移”的信息提供给编译器,这样编译器可以对代码进行优化,以减少指令跳转带来的性能下降。 意思就是 exp == c 的概率很大。
    fastpath(x) 表示x为1的概率很大, slowpath(x) 表示x为0的概率很大。 它和if一起时候用, if(fastpath(x)) 表示执行if语句的可能性大, if(slowpath(x))表示执行if语句的可能性小。


    reinterpret_cast 类型的转化
    reinterpret_cast 解释


    enable_if 判断
    enable_if 内容解释


    pair 的使用
    pair的使用, 类似swift途中的元祖


    std::move
    了解
    了解


    DenseMap 周密映射
    详细解释


    memmove & memcpy
    详解


    Runtime源码中的DisguisedPtr
    DisguisedPtr


    map & unorder_map
    了解0
    了解1

    emplace & try_emmplace 给映射插入数据
    emplace方法
    emplace 详解

    emplace 和try_emplace 的区别
    emplace 和try_emplace 使用注意事项

    STL 源码学习
    STL 源码学习
    STL 知乎

    std::move 的使用
    0
    1

    LLVM中的unordered_map 和map
    桶排序百度百科, 可以先了解这个桶排序算法
    unordered_map 详解参考 - 0
    unordered_map 详解参考 - 1
    unordered_set和unordered_map 详解参考
    unordered_map hash数据解决冲突

    hash 的负载因子和最大因子
    深入了解C++(1):hash冲突、退化

    malloc / calloc / realloc 之间的区别
    https://zhuanlan.zhihu.com/p/87061787
    https://zhuanlan.zhihu.com/p/384034790
    https://zhuanlan.zhihu.com/p/57863097

    typename 在template中定义一个泛型的变量,使用typename 避免歧义
    typename 的使用

    pair的使用
    就是只有1、2两个数组的结果
    pair 和tupe区别

    // pair 简单代码, 里面有一些对应的方法
    template <class T1, class T2>
    struct pair
    {
        typedef T1 first_type;
        typedef T2 second_type;
    
        T1 first;
        T2 second;
    
        pair(const pair&) = default;
        pair(pair&&) = default;
        explicit(see-below) constexpr pair();
        explicit(see-below) pair(const T1& x, const T2& y);                          // constexpr in C++14
        template <class U, class V> explicit(see-below) pair(U&& x, V&& y);          // constexpr in C++14
        template <class U, class V> explicit(see-below) pair(const pair<U, V>& p);   // constexpr in C++14
        template <class U, class V> explicit(see-below) pair(pair<U, V>&& p);        // constexpr in C++14
        template <class... Args1, class... Args2>
            pair(piecewise_construct_t, tuple<Args1...> first_args,
                 tuple<Args2...> second_args);
    
        template <class U, class V> pair& operator=(const pair<U, V>& p);
        pair& operator=(pair&& p) noexcept(is_nothrow_move_assignable<T1>::value &&
                                           is_nothrow_move_assignable<T2>::value);
        template <class U, class V> pair& operator=(pair<U, V>&& p);
    
        void swap(pair& p) noexcept(is_nothrow_swappable_v<T1> &&
                                    is_nothrow_swappable_v<T2>);
    };
    

    using 用法 ,替代typedef 更加好用
    using 用法

    enable_if 在模板中常常使用
    enable if

    is_convertible 转换A到B的数据类型
    is_convertible

    std::forward & std::move 关联以及区别
    std::forward

    std::conditional(x, A, B ) x==true —> A ; false-> B
    std::conditional

    std::forward_iterator_tag
    forward_iterator_tag

    explicit
    参考

    相关文章

      网友评论

          本文标题:C/C++ 一些重要基础

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