C++知识点
1.
深入了解std:thread: 参考
()初始化与{}初始化: 参考
各种锁(参考) unique_lock的坑点,使用Qt的锁:参考
volitile等:参考
erase是真正删除,但是会导致迭代器失效:参考
likely, unlikely (C++20 )起:参考 gcc内置指令实现此功能:参考 参考
std::memory_order:参考
std::alignment_of:参考
c++的很多新特性都在宏里面了:参考
std::memory_order
std::enable_shared_from_this reference weak_ptr的使用
POD class: 参考(QSingleton)
MRU: webrtc/base/containers/mru_cache.h
std::ptrdiff_t
friend function containers.h
std::is_trivial std::enable_if_t
std::remove_const_t
std::bitset<N>
std::addressof
std::is_constructible<Base, Args&...>::value
using argument_types = typename std::tuple_element<i, std::tuple<Args...>>::type; (from)
std::is_pointer (参考)
std::is_object
std::is_member_function_pointer<_Decayed>::value
std::is_member_object_pointer<_Decayed>::value> reference
std::result_of_t<> 推断返回值比较好
std::tuple_size<Tup>::value == 0
std::forward_as_tuple:参考
__cxa_demangle:qt5integration
auto async_stdio = [](){ std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); std::setvbuf(stdout, nullptr, _IOFBF, BUFSIZ); return 0; }();
#include <chrono> auto start = std::chrono::steady_clock::now(); auto end = std::chrono::steady_clock::now(); std::chrono::duration<double> elapsed_seconds = end - start; std::cout << elapsed_seconds .count() << std::endl;
2. SFINAE
std::enable_if 的各种使用方式 限定模板传递的类型
or return void();
template <typename T> T FuncC() { return T(); //这里举例返回 T(); } template <typename T> T FuncD() { return FuncC<T>(); } //一般处理 template <typename T> T FuncE() { return FuncC<T>(); } //特化版本 template<> void FuncE<void>() { FuncC<void>(); } //或者进行重载亦可 void FuncE() { FuncC<void>(); } void Test() { FuncE<int>(); //泛化版本 FuncE<void>(); //特化版本 FuncE(); //重载版本 }
定义 void 类型的成员变量的方法,参考:
template <int N, class Enable = void> struct S { }; template <int N> struct S<N, typename std::enable_if<N == 1>::type> { .... };
#include<type_traits> template <typename OUT> typename std::enable_if<std::is_same<void, OUT>::value, void>::type func() { return; } template <typename OUT> typename std::enable_if<!std::is_same<void, OUT>::value, OUT>::type func() { return OUT(); } int main() { func<int>(); func<void>(); }
3. 其他
模板元编程,全局特化\局部特化等: 参考
推导参数类型以及返回值的原理: 参考
如何遍历tuple:参考
编译时 if 的实现:C++模板元编程入门-sfinae基础 - 知乎 (zhihu.com)
特化:参考 全特化和偏特化(考虑是否可以和 std::enable_if 联合使用)
std::tuple_size<Tup>::value == 0
如何深入浅出通俗易懂地介绍一下c++ 里的Template metaprogramming? - 知乎 (zhihu.com)
公共类型返回: 参考
返回模板类:

enable_shared_from_this(解决异步调用比较好的方式)
4. C++ new、delete全局实现
参考 参考
5. linux syslog的用法:参考
6. override 和std::bind的使用
if (m_enableSystemMove) { VtableHook::overrideVfptrFun(m_window, &QWindow::event, std::bind(&DNoTitlebarWlWindowHelper::windowEvent, std::placeholders::_1, std::placeholders::_2, this)); // VtableHook::overrideVfptrFun(m_window, &QWindow::event, [=](QWindow *w, QEvent *event) -> bool { // return windowEvent(w, event, this); // }); } else if (VtableHook::hasVtable(m_window)) { VtableHook::resetVfptrFun(m_window, &QWindow::event); } } bool DNoTitlebarWlWindowHelper::windowEvent(QWindow *w, QEvent *event, DNoTitlebarWlWindowHelper *self) {
7. 参考
int func_rand() { srand((unsigned)time(NULL)); return rand(); } void test() { static thread_local const int data = func_rand(); std::cout << data << std::endl; sleep(1); } int main(int argc, char *argv[]) { test(); test(); test(); std::thread thread([]{ test(); }); thread.join(); return 0;
8. 堆、栈地址的判断

浙公网安备 33010602011771号