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途中的元祖
DenseMap
周密映射
详细解释
memmove & memcpy
详解
Runtime源码中的DisguisedPtr
DisguisedPtr
emplace & try_emmplace 给映射插入数据
emplace方法
emplace 详解
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
参考
网友评论