arc4random_uniform 实现一个简单的概率算法
Oct 28, 2022
arc4random_uniform 是 C 标准库中提供的随机数生成方法,定义在头文件 stdlib.h 中。 arc4random_uniform(n); 可以生成 [0, n) 的随机整数。 概率是指一个随机事件的发生几率,比如说有标号为 0 到 9 的 10 个小…
C++ 11 中的原始字符串字面量(Raw String Literal)
Oct 09, 2022
C++ 11 开始增加了 UTF-16 和 UTF-32 字符串字面量,默认的字符串字面量是 UTF8,三种编码的写法如下: // UTF-8 const char *utf8_string = "abc"; const char *utf8_string2 = u8"abc"; // UTF-16 const char16_t *utf16_string = u"abc"; // UTF-32 const char32_t *utf32_string = U"abc"; 在字…
C++ 中的 MAX 和 MIN 宏
Sep 18, 2022
在学习 C 语言的时候,最先接触到的两个宏 MAX 和 MIN,用于找出两个数中较大和较小的那个值。 大多数的教程中,这两个宏的定义是这样的: #define MIN(a,b) (a) < (b) ? (a)…
C++ 17: 结构化绑定(Structured Binding)
Aug 29, 2022
结构化绑定(Structured Binding)是 C++ 17 的新特性,是一个很方便的语法糖。 typedef struct Rect { double x; double y; double width; double height; } Rect; Rect bounds{ 100, 100, 300, 400 }; auto [ x, y, w, h…
C++ 中使用 RAII 的注意事项
Aug 20, 2022
RAII (Resource Acquisition Is Initialization) 翻译为中文是「资源获取即初始化」。 通常用来做局部资源清理或者防止忘记解锁导致死锁: class LockGuard { public: LockGuard() { lock(); } ~LockGuard() { unlock(); } private: static pthread_mutex_t _fastmutex; void lock() { pthread_mutex_lock(&_fastmutex); } void unlock() {…
C/C++ 中的 static 和 inline 的作用
Aug 03, 2022
static 把符号限制为 LOCAL,避免链接时同名造成冲突。 inline 把符号标识为 WEAK,如果出现多个同名则只有一个拷贝。 static inline 组合,作用和 static 一样,区别在于编…
C++ 中的右值引用
Jul 08, 2022
C++ 里的表达式有左值和右值的概念。 一个表达式(expression)要么是广泛左值类型(glvalue),要么是右值类型(rvalue)。 广泛…
C 和 C++ 中的结构体(struct)有和不同?
Jun 30, 2022
struct 是一种简单的数据结构,是把不同类型的数据聚合在一起的一种方式。 在 C 语言里,struct 数据结构具有内存连续性的特点,就是说一个结构体的所有…
C++ 中的仿函数(Functor)和匿名函数(Lambda)
Jun 27, 2022
从 C++ 11 标准开始,被称为现代 C++。其中的一个原因,就是增加了 Lambda 表达式。 仿函数 在没有 Lambda 表达式之前,如果要在局部运行一个函数,只能使用仿函数。 仿…