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提供了這個內建函數來幫助程序員處理分支預測,目的是將“分支轉移”的信息提供給編譯器赵誓,這樣編譯器可以對代碼進行優(yōu)化,以減少指令跳轉帶來的性能下降。 意思就是 exp == c 的概率很大滓侍。
fastpath(x) 表示x為1的概率很大, slowpath(x) 表示x為0的概率很大牲芋。 它和if一起時候用撩笆, if(fastpath(x)) 表示執(zhí)行if語句的可能性大, if(slowpath(x))表示執(zhí)行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 之間的區(qū)別
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區(qū)別
// 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 關聯以及區(qū)別
std::forward
std::conditional(x, A, B ) x==true —> A ; false-> B
std::conditional
std::forward_iterator_tag
forward_iterator_tag
explicit
參考