C/C++ 一些重要基础

2022-02-14  本文已影响0人  helinyu

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
参考

上一篇下一篇

猜你喜欢

热点阅读