C++知识点

1.

  深入了解std:thread: 参考

  ()初始化与{}初始化: 参考

  async

  各种锁(参考)  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)

  mem leak

  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();         //重载版本
}
View Code

   定义 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)
{
View Code

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;
View Code

8. 堆、栈地址的判断

  参考    知乎

 

 

 
posted @ 2021-05-08 10:13  AlexOne  阅读(109)  评论(0)    收藏  举报