C++
文章平均质量分 57
阿远的脱发之旅
游戏 / 大前端 / TA / 建模 / Unity / Godot / React / C# / C++ / Rust
展开
-
C++ SFINAE 在模板偏特化中增加额外的约束 trait
我们经常需要确定某个类型是否为某个模板的实例,写一个简单的 trait 即可,这里我们使用了一个非常简单的偏特化:template <typename T>struct A {};template <typename>struct is_instantiation_of_A : std::false_type {};template <typename T>struct is_instantiation_of_A<A<T>> : s原创 2022-05-19 12:45:05 · 645 阅读 · 0 评论 -
C++ IDE 推荐保持打开的 clang-tidy 检查列表
Clang-tidy 是一个比较实用的代码检查程序,它可以检测出很多笔误等低级错误,也会提出一些已经得到广泛验证的 best practice,不过提供的检查数量众多,有些过于严苛,还有一些互相矛盾(比如 fuchsia-trailing-return 建议你永远不要写 尾随返回类型,但 modernize-use-trailing-return-type 建议你总是这样写),所以我们必须有选择地打开一部分真正有必要的检查。我过了一遍目前(2022-01-19)提供的 所有检查项目,然后根据 CLion原创 2022-01-19 16:10:28 · 3379 阅读 · 0 评论 -
CMake 使用 GCC 编译器 (Windows)
Windows 下如果安装了 VS 则 CMake 会默认创建 VS 的工作区,我们想用 gcc 的话设置 CMAKE_C_COMPILER 没用。解决方法是往 cmake 命令中加点参数:cmake CMakeLists.txt -G "MinGW Makefiles"这样就可以创建出 GCC 使用的 Makefile 了。...原创 2021-12-10 16:35:47 · 3211 阅读 · 0 评论 -
stb 作者教你如何编写单文件 (Header-only) 的 C/C++ 库
说明所谓单文件库,就是整个库只有一个头文件,用起来就像引入标准库一样简单。最近需要写单文件(Header-only)形式的工具库,于是参考了 stb 库 作者提供的指南,感觉真不绰。下面是我对这篇文档的翻译版本,由于个人水平所限,难免有所纰漏,因此给出了英文原文作为对照。英文版文档包含于 stb 库的 docs 文件夹,也可以 在这里查看。正文关于如何创建单文件库,我所学到的—— Sean Barrett 于 2013 年 9 月当创建形式类似于 stb 库的单文件库时,你应该做的,以及为什翻译 2020-12-22 17:25:52 · 3596 阅读 · 0 评论 -
MinGW-w64 启用 LTO 加快链接速度
GCC 链接慢是个很要命的问题。在 Windows 下使用 MinGW 64 编译器时,项目稍大一些,链接就会变得非常慢,然而使用 MSVC 编译相同的代码时,链接用时都是毫秒级。网上搜索了一圈没有找到比较好的解决办法。进一步了解到 GCC 4.7.0 开始支持 LTO(链接时间优化),信息来源是 这篇博客,但默认情况下是不开启 LTO 的。Windows 下要启用这个功能很简单,做两件事:把 MINGW64-根目录\libexec\gcc\x86_64-w64-mingw32\8.1.0 下的 l原创 2020-10-08 23:13:03 · 1533 阅读 · 0 评论 -
真相:C++ 嵌套类与外围类的访问权限关系
最近遇到了写嵌套类的情况,涉及到访问权限问题。什么是嵌套类C++ 允许在一个类的内部定义另一个类,在内部定义的类称为 嵌套类,包含嵌套类的类就称为该嵌套类的 外围类。比如:class Outer { // Outer 是外围类 class Inner { // Inner 是嵌套类 }}嵌套类有这样一些性质:嵌套类的名字只在其外围类内可见,在类外使用时,需要加作用域;嵌套类可以直接引用外围类的静态成员、类名和枚举成员,不需要加作用域;继承一个嵌套原创 2020-08-14 22:26:53 · 1350 阅读 · 3 评论 -
C++ 异常 0xC0000005 访问冲突,exit code 0xC0000005 的解决方法
该异常代号对应“访问冲突”,即内存的读写权限冲突,一般意味着代码中存在 3 种可能的问题……原创 2020-08-03 12:35:02 · 29135 阅读 · 1 评论 -
C++ 实现随机字符串生成器(C++11标准)
这篇随记主要想说明的是:怎么实现这个生成器;C++11 推荐的随机数发生方法。代码如下:#include <string>#include <random>using std::string;using std::random_device;using std::default_random_engine;string strRand(int length) { // length: 产生字符串的长度 char tmp; // t原创 2020-08-02 19:47:14 · 10813 阅读 · 0 评论 -
C++矩阵运算库Eigen快速上手指南
介绍Eigen 3 是一个以纯泛型编写的 C++ 矩阵运算库,它的协议是 MPL2,以源代码的形式提供给用户,所以只要把它的代码 include 进自己的程序就可以使用,不需要链接 DLL,也没有任何除 iostream 以外的依赖项。实用链接官网官方文档所有头文件列表例程下面是一个比较全面的示例,我写了较多的注释来澄清一些上手时容易误会的问题,旨在帮助你在一个小时内学会 Eig...原创 2019-09-18 21:44:46 · 984 阅读 · 0 评论 -
C++如何在cout中正确使用退格“\b”
文章目录结论错误示例 1错误示例 2正确示例 1正确示例 2结论简单地说,\b 之后不能紧接着换行,无论用什么方式换。错误示例 1代码:cout << "1,2,3,4,5,\b" << endl;希望输出:1,2,3,4,5实际输出:1,2,3,4,5,原因:std::endl 在刷新输出缓冲区的时候同时会换一个行。错误示例 2代码:cou...原创 2019-08-14 23:21:34 · 18356 阅读 · 2 评论