跳至正文

技术

ImGui天下第一

  • C++

之前听油管的up提过imgui,然后今天看到几个地方都说这玩意儿好用,在维护的时候就拉下来跑了一下。
(跑完)
ImGui天下第一!
开发太方便了!不需要设置任何回调,按钮按下在下次tick就会返回True

            static float f = 0.0f;[......]

继续阅读

编译clang搞清楚的一些概念(gcc, llvm, clang, libc++, libstdc++)

  • 技术

clang++/llvm

因为开发机的gcc版本太低了,就重新编译了一个clang,大概了解了一下这些底层工具的概念。

clang++和clang都是llvm的一部分,而llvm是一个庞大的、模块化编译器的项目,clang++只是基于llvm的编译器前端。

所以对于一个C++编译过程,从.cpp生成[……]

继续阅读

[Asio] 学习笔记1. 初识asio和tcp

打算基于asio写多种序列化库的测评,在底层用同一个asio构造函数的方式,然后上层测试脚本里切换序列化的实现。
但是最开始按着demo写逻辑就出现了问题,我想先纯面向过程,就没像demo里写一个connection类,然后就探究到一直会闪退的问题。

最后定位到时ip::tcp::socket析构的[……]

继续阅读

用python理解C++20协程的设计

C++20拥有一个全新的特性:协程。

我来从python的角度来解释C++这个特性设计与其他语言的不同,目的以及意义。

协程是一种可以挂起和恢复执行的函数。C++20协程跟python的生成器是很相似的,如果函数中出现了co_yield, co_return, co_await,那么这个函数就是协程[……]

继续阅读

constexpr, consteval, constinit家族

  • 技术

介绍

这是《现代C++语言核心特性解析》的读书笔记。

constexpr家族的内容

书里给constexpr给了很多篇幅,但是总体来说就是一个,const表示的是不允许修改的常量,而constexpr表示的是编译期的常量。
但是逐渐被扩展到constexpr可以被用作函数,lambda,以及if c[……]

继续阅读

结构化绑定(C++17, C++20) 学习笔记

  • 技术

结构化绑定

在python中是能够很轻易地实现多个返回值的函数的,例如:

def return_multi_values():
  return 100, 20
x, y = return_multi_values()

但是在C++应该是会用类、结构体或者引用来实现,在C++11之后也引入了std:[……]

继续阅读

override和final说明符(C++11) 学习笔记

  • 技术

重写、重载和隐藏

重写(override)、重载(overload)和隐藏(overwrite)在C++完全不同的概念,先梳理一下区别:

重写

重写的意思更加接近于覆盖,在C++中是指派生类覆盖了基类的虚函数,这里的覆盖必须满足有相同的函数签名和返回类型,即重写是有相同的函数名、形参列表以及返回类型[……]

继续阅读

C++ 11/17强枚举类型读书笔记

  • 技术

强枚举类型

原来继承自C语言的枚举类型在C++之父看来是一个奇怪且半生不熟的概念。

枚举的弊端

虽然枚举类型可以避免A类型赋值给B类型,但是:

  • 可以直接跨枚举比较
  • 可以直接转化为int
  • 同名的枚举值是冲突的

虽然有很多缺点,但依然是建议使用枚举而不是const int来做枚举,那样问题只会更多。[……]

继续阅读

默认和删除函数(C++11)笔记

  • 算法

类的特殊成员函数

在C++中定义一个类,会默认生成以下6个成员函数:

  • 默认构造函数
  • 析构函数
  • 复制构造函数
  • 复制赋值运算符函数
  • 移动构造函数(C++11 新增)
  • 移动赋值运算符函数(C++11 新增)

这些功能很实用,在我们直接定义一个类之后,能够直接互相拷贝,而不用为了编译器语法的原因一定要写[……]

继续阅读