跳至正文

constexpr, consteval, constinit家族

  • 技术

介绍

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

constexpr家族的内容

书里给constexpr给了很多篇幅,但是总体来说就是一个,const表示的是不允许修改的常量,而constexpr表示的是编译期的常量。
但是逐渐被扩展到constexpr可以被用作函数,lambda,以及if constexprt,都是为了让编译期可以做更多的事情,给与开发者更多的自主性。
反正基本上想要去做一些预计算以及在模板里,用constexpr就没错了。

consteval是什么呢?

这件事情我理解来说就是constex[……]

继续阅读

[2024年10月31日]

今天生命状态异常的好!很难描述是怎么造成的,在公司忙了一些事情,吃完饭之后就开始玩游戏,玩了几把就回家…
路上听着睡眠那本书,哦,那句话我印象很深:然而值得注意的是,无论机会有多大,大脑都无法恢复它失去的所有睡眠。人类永远不能把我们之前失去的睡眠补回来。
可能是这句话打醒了我,让我今天生命状态异常的好!
回家就先吃药,收拾东西,久违的拖地,处理各种垃圾…

今天精神上的状态真的还挺舒服的,可能是被睡眠的警告惊醒,也可能是之前生病的后遗症。
总之,希望明天能保持这个状态,每天10点开始集中注意力有点太迟了,因为很快就到[……]

继续阅读

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

  • 技术

结构化绑定

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

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

但是在C++应该是会用类、结构体或者引用来实现,在C++11之后也引入了std::tuple,也可以用来实现类似的功能:

#include <iostream>
#include <tuple>

std::tuple<int, int> return_multi[......]

继续阅读

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

  • 技术

重写、重载和隐藏

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

重写

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

重载

它通常指一个类中有两个或者以上的函数,他们函数名相同,但是函数签名不同。

隐藏

隐藏的概念是指基类成员函数,无论是否是虚函数,当派生类出现同名函数时,如果派生类函数签名和基类不同,则基类的会被隐藏;如果派生类函[……]

继续阅读

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

  • 技术

强枚举类型

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

枚举的弊端

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

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

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

强枚举类型

C++11标准增加了强枚举类型,为了保证老代码的兼容性,同时也兼容了旧的特性,新增的枚举类型具有三个特性:

  • 枚举标识符属于强枚举类型的作用域。
  • 枚举标识符不会隐式转换为整型。
  • 能指定强枚举类型的底层类型,[……]

    继续阅读

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

  • 算法

类的特殊成员函数

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

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

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

但是它也有一些潜规则:

  • 声明任何构造函数都会抑制默认构造函数的添加。
  • 一般用自定义的构造函数替代默认构造函数,类就会转化为非平凡类型。

非平凡类

什么是平凡类什么是非平凡类呢?
这里的概念是出自C语言[……]

继续阅读

Hazel视频笔记 —— 预编译头文件

视频内容

刚开始我以为up就是想把所有的系统级头文件合并在一个.h里然后引用,还在想这有什么意义,好看一点?

看到改CMake直接使用了一个pchheader才知道,这里有东西的!!

预编译的头文件

PCH文件是一个预编译头文件(pre-compiled header),它的后缀是PCH,所以也叫PCH文件。编译器会将头文件的内容事先编译成二进制的中间文件,在整个编译过程中,只编译一次,并且有缓存,除非有变化,否则不会重新编译(每个引入的.h和.cpp)文件,从而大大提高编译速度。

每个源文件只能使用一个预编译的标[……]

继续阅读

Hazel视频笔记 – EventSystem

  • 技术

介绍

最近开始听Youtube上一个大佬自研引擎的开发全过程,本篇是我做的笔记。

事件集中定义

这篇视频介绍了他对于EventSystem的初步规划和开发,首先我因为用python很多,很习惯于不提前把一切事件都定义好,EventSystem就应该是外部可以定义Event,并且可以发布Event。

但是他这里做的事情是,定义好了所有的Event,有好有坏,好处呢是所有的事件集中在Event.h的里面,但也有坏处的,坏处就是如果我想增加事件必须要修改引擎的代码,或者要新开发一个Delegate的系统。[……]

继续阅读

函数式编程 记录

  • 技术

函数式编程范式则认为:函数也是一种变量,函数可以作为另一个函数的参数!

通常来说,软件应当追求低耦合度,适度解耦的软件能更快适应需求变化。但过度的低耦合也会导致代码过于分散,不易阅读和修改,甚至可能起到反效果。

[……]

继续阅读