随笔分类 - C/C++
摘要:C++ 中的 volatile 和 atomic 0. TL;DR std::atomic 用于多线程并发场景,有两个典型使用场景: 原子操作:对 atomic 变量的操作(读/写/自增/自减)仿佛受互斥量保护。一般通过特殊的机器指令实现,比使用互斥量更高效 限制编译器/硬件对赋值操作的重新排序 v
阅读全文
摘要:TLDR 修饰变量的时候,可以把 constexpr 对象当作加强版的 const 对象:const 对象表明值不会改变,但不一定能够在编译期取得结果;constexpr 对象不仅值不会改变,而且保证能够在编译期取得结果。如果一个 const 变量能够在编译期求值,将其改为 constexpr 能够
阅读全文
摘要:本文尝试回答: 现代 C++ 有哪几种初始化形式?分别能够用于什么场景?有什么限制? MyClass obj(); 为什么没有调用默认无参构造函数创建一个对象? new int 和 new int() 有什么区别? 直接初始化、拷贝初始化、列表初始化、默认初始化、值初始化、类内初始值、构造函数初始值
阅读全文
摘要:问题描述 前两天群里有人问了这样一个问题: 在 a 文件中定义了一个全局变量,可以在 b 文件中引用。但一旦把全局变量改为 const 之后,就无法在 b 文件中引用,编译(链接)报错“无法解析的外部符号”,这是为什么? 解析 这是因为 const 修饰的全局变量默认具有文件作用域(类比C语言中的s
阅读全文
摘要:C++ 学习宝藏网站分享 1. C++ 在线参考手册 Cppreference https://zh.cppreference.com C++ 开发者必备的在线参考手册,是我最常访问的 C++ 网站之一。作为参考手册,不仅包含了语言本身的词法、语法特性,还包含了对 C++ 标准库的介绍:需要 inc
阅读全文
摘要:C++ 核心指南 —— 性能 阅读建议:先阅读 《性能优化的一般策略及方法》 截至目前,C++ Core Guidelines 中关于性能优化的建议共有 18 条,而其中很大一部分是告诫你,不要轻易优化! 非必要,不优化 Per.1: 不要无故优化 Per.2: 不要过早优化 Per.3: 只优化少
阅读全文
摘要:⚠️ clang-tidy 的规则能够帮助检查潜在的问题,不要盲目抑制警告! 可以通过添加 NOLINT, NOLINTNEXTLINE, 以及 NOLINTBEGIN … NOLINTEND 注释来抑制某些(或所有)clang-tidy 警告。 NOLINT 抑制同一行的警告 NOLINTNEXT
阅读全文
摘要:> C++ 核心指南(C++ Core Guidelines)是由 Bjarne Stroustrup、Herb Sutter 等顶尖 C+ 专家创建的一份 C++ 指南、规则及最佳实践。旨在帮助大家正确、高效地使用“现代 C++”。 > > 这份指南侧重于接口、资源管理、内存管理、并发等 High
阅读全文
摘要:> C++ 核心指南(C++ Core Guidelines)是由 Bjarne Stroustrup、Herb Sutter 等顶尖 C+ 专家创建的一份 C++ 指南、规则及最佳实践。旨在帮助大家正确、高效地使用“现代 C++”。 > > 这份指南侧重于接口、资源管理、内存管理、并发等 High
阅读全文
摘要:# C++ 惯用法之 Copy-Swap 拷贝交换 > 这是“C++ 惯用法”合集的第 3 篇,前面 2 篇分别介绍了 RAII 和 PIMPL 两种惯用法: > > - [RAII: Resouce Acquistion Is Initialization](https://www.cnblogs
阅读全文
摘要:RAII(Resource Acquisition Is Initialization)资源获取即初始化,是 C++ 中最基本、应用最广范的惯用法(idiom)之一。 RAII 的基本思想是通过构造/析构函数,对资源的获取/释放进行封装,然后**借助局部对象的自动生命周期来管理资源**。使用 RAI
阅读全文
摘要:> C++ 核心指南(C++ Core Guidelines)是由 Bjarne Stroustrup、Herb Sutter 等顶尖 C+ 专家创建的一份 C++ 指南、规则及最佳实践。旨在帮助大家正确、高效地使用“现代 C++”。 > > 这份指南侧重于接口、资源管理、内存管理、并发等 High
阅读全文
摘要:> C++ 核心指南(C++ Core Guidelines)是由 Bjarne Stroustrup、Herb Sutter 等顶尖 C++ 专家创建的一份 C++ 指南、规则及最佳实践。旨在帮助大家正确、高效地使用“现代 C++”。 > > 这份指南侧重于接口、资源管理、内存管理、并发等 Hig
阅读全文
摘要:C++ 核心指南(C++ Core Guidelines)是由 Bjarne Stroustrup、Herb Sutter 等顶尖 C++ 专家创建的一份 C++ 指南、规则及最佳实践。旨在帮助大家正确、高效地使用“现代 C++”。 这份指南侧重于接口、资源管理、内存管理、并发等 High-leve
阅读全文
摘要:C++ 里面有一些惯用法(idioms),如 RAII,PIMPL,copy-swap、CRTP、SFINAE 等。今天要说的是 PIMPL,即 Pointer To Implementation,指向实现的指针。 ## 问题描述 在实际的项目中,经常需要定义和第三方/供应商的 C++ 接口。假如有
阅读全文
摘要:单例模式是设计模式中最简单、常见的一种。其主要目的是确保整个进程中,只有一个类的实例,并且提供一个统一的访问接口。常用于 Logger 类、通信接口类、线程池等。 # 基本原理 限制用户直接访问类的构造函数,提供一个统一的 public 接口获取单例对象。 这里有一个“先有鸡还是先有蛋”的问题: -
阅读全文
摘要:一些结论 如果 shared_ptr 管理的资源不是 new 分配的内存,才考虑自定义删除器,这也是为什么 make_shared 不支持自定义删除器的原因,因为 make_shared 就是通过 new 分配内存资源 make_shared 不支持自定义删除器 shared_ptr<Bar> sp
阅读全文
摘要:《C++ Primer 5th》 P406 const 方法,不能修改指针本身,但是可以修改指针指向的对象! class Foo { public: Foo() : c(new int()) {} void inc() const { *c += 1; cout << *c << endl; } p
阅读全文
摘要:void foo() { auto d = new D(); E e1; {E e2;} E e3; static F f; delete d; } A a; namespace bar { B b; } int main() { G g; foo(); } static C c; 执行结果 构造顺
阅读全文
摘要:lambda 能做到的,手写也能做到,但是 lambda 实在是太方便了,以至于对 C++ 开发产生了颠覆性的影响: 常用场景 STL _if 算法族的谓词 智能指针的自定义析构器 线程 API 的条件变量(对谓词进行特化处理) 临时制作回调函数、接口适配函数 条款 31:避免默认捕获 lambda
阅读全文