enable_shared_from_this的作用

C++ 中,std::enable_shared_from_this类模板和shared_from_this成员函数主要用于在一个类的成员函数中安全地获取指向自身的std::shared_ptr。它们的作用更多是为了确保资源正确管理。 ...

2024-09-16 · 1 min · 47 words · Kerolt

【协程】C++是如何通过SFINAE来检查promise_type的

我们知道在C++20的协程中,自己实现的Coroutine中必须包含一个Promise,并且这个Promise必须要实现: get_return_object() initial_suspend() final_suspend() unhandled_exception() 少了其中任何一个,编译器都会报错。那这是怎么实现的呢?如果是像java那样是一个接口而没有对应的实现从而报错还能理解,但是我们的代码中的Promise完完全全是我们自己写的,也没有使用继承,编译器你怎么知道我在实现协程时少了什么东西呢? 答案就是:SFINAE(Substitution Failure Is Not An Error,替换失败不是错误)。 ...

2024-09-01 · 1 min · 109 words · Kerolt

C++中如何使用lambda实现递归

在用C++刷leetcode时,我希望把一个递归函数像js、python那样写在运行函数内部,那么可以使用function和lambda表达式来实现。但如果这个递归函数的参数比较多,那么function的模板参数同样需要写很多,能不能用auto来实现得简单一点呢? ...

2024-08-27 · 1 min · 46 words · Kerolt

【协程】C++20协程初体验

为什么我们需要协程? 为什么我们有了线程还需要协程呢?(其实这个问题不应该这么问,协程的出现在线程之前)在一个进程中虽然我们可以创建多个线程,但是在一个进程中能创建的线程数量是有限制的,并且线程的调度仍然受操作系统控制,也就是说线程何时抢占、何时被抢占对于开发者来说都是透明的,并且在调度的过程中还可能涉及到用户态和内核态的切换开销。 ...

2024-08-18 · 2 min · 266 words · Kerolt

避免cout线程不安全的一个做法

前言 std::cout重载了<<运算符,这使得写一些很短的代码时很方便。但是如果在多线程的条件下,cout并不是线程安全的。 ...

2024-02-21 · 1 min · 137 words · Kerolt

纠正一下对cpp移动语义的错误理解

之前对于移动语义的理解就是使用std::move将一个对象所占有的资源的所有权转移给另一个对象,但是只要使用std::move就足够了吗?这显然是错误的。 ...

2024-02-18 · 1 min · 128 words · Kerolt

C++中lambda与priority_queue一起使用

想写这篇博客的原因是在刷力扣的 347. 前 K 个高频元素 一题时,需要使用到优先队列priority_queue,其定义如下: template< class T, class Container = std::vector<T>, class Compare = std::less<typename Container::value_type> > class priority_queue; 第三个参数是一个可以自定义的比较类型,其必须满足二元谓词,通常可以使用如下两种方法: 使用自定义的函数对象 lambda表达式 使用std::greater或std::less(这里就不介绍这种方法了) ...

2024-02-14 · 1 min · 89 words · Kerolt

muduo网络库的安装

下载源码 链接:https://github.com/chenshuo/muduo/releases/tag/v2.0.2 ...

2024-01-20 · 1 min · 47 words · Kerolt