copilot 的 Edit 模式是真猛啊,几百行几百行生成单元测试用例(′▽`〃)
std::string 自C++17起终于要求内存严格连续,因此提供了非const版本的data(),可以直接写入数据,简化了文本数据的定量读取。
tinyobjloader 关于模块接口文件 PR :“C++20 is not widely used as of 2025. I might merge the PR after 3~4 years later.”
ε=(´ο`*)))
今天迷枵“狠狠地”制作了 tinyobjloader、 stb_image、 glfw 的模块接口文件。(`⌒´メ)
如果 const auto
推导出是指针类型,那么 const
修饰的是指针本身而非指针指向的对象。比如 int*
,推导出的结果是 int* const
而非 const int*
。同理,如果你将某种指针类型 T*
别名为 K
,则 const K
实际是 T* const
而非 const T*
。
咕一天,参加匹诺康尼的圣杯战争o(* ̄▽ ̄*)o
目前 Edge 浏览器的 PDF 查看功能存在严重 BUG,很多 PDF 会被显示为全白页面。这是Edge的一项实验性功能导致的,你可以在 Edge 的网址栏输入 `edge://flags/#edge-new-pdf-viewer` 前往实验功能面板,第一个就是 ` New PDF Viewer(#edge-new-pdf-viewer)` ,将其关闭并重启浏览器即可解决问题。
C++20的模块接口文件,编译为动态链接库时依然需要编译器相关的导出符号,比如MSVC的 __declspec(dllexport)
某些软件的缓存默认在C盘,而且根本不会清理。比如网易云音乐,刚刚一查发现它的缓存占了迷枵的C盘50GB。。。
某种意义上,学的越多会的越少
迷枵以 1 分(罚时)的极大优势痛失银牌,荣获铜牌第一💦💦💦
Outlook的垃圾邮件检测机制极差,只要邮件有中文,基本就会被认为是垃圾邮件。重点的还没地方可以调整检查机制
手机QQ(安卓),动态页面上方的“游戏中心”终于可以不显示了,在“动态页面-更多-管理”中调整。以前强制显示游戏中心,还总是有无法关闭的红点。
即使你使用了C++20的模块化,你依然应该将声明与实现分离!!模块接口文件 .ixx/.cppm
要求顺序编译,如果你不分离声明与实现,一旦修改上层模块,就需要重新顺序地编译全部下层模块文件,极其耗时。注意 .cpp
文件可以轻松并行编译,如果模块接口仅含声明和少部分内联函数、将大部分实现代码放在 .cpp
文件,因为修改 .cpp
文件不会影响模块声明和文件,其他文件不需要重编译,更新项目耗时极短。如果你尝试使用标准库库模块(不需要编译标准库头文件),并分离模块接口文件与实现文件,将看到极快的编译速度。
Windows 11 的“快速启动”设置曾存在一些问题,可能占用超高内存,不知道现在是否修复。迷枵的笔记本32GB内存,曾因为它出现过开机占用即90%+的问题。
Minecraft 中的实体的碰撞箱并不会“转向”,永远是对齐坐标系的长方体。因此,即使是像“马”这样的对象,碰撞箱的长和宽也是相等的(防止马朝向不同时碰撞箱不同)。
《影之实力者》小说已经很久很久很久没更新了。。。
编程语言的 for 循环可以分为“基于范围”和“基于条件”,而某些现代语言只有范围 for (比如Py、Rust等)。这里依然以C++为例,for 循环最常被用于遍历数组对象,而范围 for 遍历数组的效率略高于条件 for (虽然差距较小)!!这是因为范围 for 基于数组子元素的指针,可以直接找到元素位置;而条件 for 通常使用索引访问数组元素,每次访问都需要根据索引进行寻址。
各类“前端”工具的设计思路是基本一致的,使用一种标记语言(HTML/XML/QML)描述(前台)界面,使用一种语言处理(后台)业务(JS/C#、Java、Kt/C++),然后使用事件(之类)的机制进行前后台的通信(Qt的signal与slot的本质也是如此)。标记语言很重要的一点是“组件化”,HTML本身并不支持自定义标签,这就是出现Vue等组件化框架的原因(之一)。
C++20的模块写起来确实很爽,但是不使用标准库时,只能将很多头文件放在全局模块片段。而模块本身依赖性导致不能完全并行编译(需拓扑排序),直接结果就是编译速度不升反降。
CLion会在编译时自动设置一些环境变量,然后就可能找错东西,比如 VCPKG_ROOT 指向 Visual Studio 自带的 vcpkg 路径,而不是手动安装设置的。
有一种奇怪的临时(较大)整数乘法:
using ull = unsigned long long; ull bmul(ull a, ull b, ull m) { ull c = a * b - (ull)((long double)a / m * b + 0.5L) * m; if (c < m) return c; return c + m; }
Windows 可以启用全局 UTF-8 默认编码,但是某些软件居然不支持,比如图吧工具箱就会乱码。
一个经典的表情包有什么重要特征?一定是某种特殊的“糊”。现在的表情包大概不会变绿,但还是可能因压缩变糊。仔细观察,特别是黑白的经典表情包(样例),可以看出波纹状的噪音,这被称为“振铃效应”,常因“理想低通滤波”产生。
Visual Studio 真是玄学,迷枵的win10台式机完全无法用 Visual Studio 运行 CMake 项目,但是用 VSCode 或 CLion 自动找到 MSVC 工具链并使用就一切正常,win11的笔记本也没有这个问题。
34分钟380MB和5分钟70MB的两个1080P(mp4)视频,直接前后拼接(使用clipchamp)合成1080P(mp4)新视频,会有多大?答案是11760MB。。。
WordPress默认开启/xmlrpc.php用于远程更新博客内容,有些人会利用此服务攻击博客。实际上你大概率用不到它(网页后台未使用此接口),可以使用Nginx拦截甚至301转发对此链接的访问。“不要惹我,不然我就把这些垃圾请求都转发到你的网站!(误)”
迷枵向OI-WIKI提交的“语言基础 – C++进阶 – 新版C++特性”内容修改已被合并,也算是为OI-WIKI贡献了万分之一的内容了。
一些语言用可以用 _
接受弃用的值,而C++(11起)有个 std::ignore
变量能做到类似的事,它实现方式非常简单:
struct _Ignore { // std::ignore 的类型 template <class _Ty> constexpr const _Ignore& operator=(const _Ty&) const noexcept { // 能够接受任何类型的赋值运算符重载 return *this; // 什么都不做 } };
前几天的蓝桥杯国赛,似乎没给迷枵发短袖(国赛纪念品)。。。
CS自学指南 是个很好的网站,正如其名“CS(计算机科学)”,理论内容居多。迷枵认为它缺少了一些更加“实践”的知识,比如非关系数据库、嵌入式与移动应用相关、测试相关、容器化集群,以及所有知识在实际应用中涉及的框架/程序。这才是完整的 CS&CT — 计算机科学与技术。
《陈凭案游记》已经45天未更新了
C++26标准大体有如下内容:静态(编译期)反射、SIMD标准库、线性代数标准库、诊断调试库、契约(前置与后置断言)、更高级的多线程/并发支持。大概是因为并发库的巨大更新,标准网络库被推迟了(调整实现方式)。(希望C++29能够见到标准网络库,不然迷枵真要被迫转向Rust了。)
C++标准库的有序容器与算法使用<
运算符,其他比较都由它实现,因此你的<
定义必须满足严格弱序,而初学者很容易因为<=
等写法违背此要求。而C++20引入了被戏称为“宇宙飞船运算符”的 <=>
,现在只需定义<=>
和==
就能自动生成其他比较运算,不必担心严格弱序问题。
C++23提供了标准库模块(目前仍是实验性),它与标准库头文件存在某种奇怪的关系:
#include <iostream> import std; // 正常运行
import std; #include <iostream> // 编译失败,重定义
C++的lamdba表达式生成的是一个匿名(非联合非聚合)类类型的对象,所以你可以通过 decltype()
获取对象类型。以前此类型默认构造必然为 delete
;但自C++20 起,lambda表达式捕获列表为空时,默认构造为 default
,所以你可以写出这样的代码:
decltype([](int x,int y){return x < y;}) less; // 创建一个类对象 std::cout << less(1, 2); // 输出 1 std::set< int, decltype([](const int x, const int y){return x > y;}) > my_set; // 直接在模板形参输入lambda表达式的类型,自定义set使用的比较运算
现在很多WIKI都选择使用mkdocs框架和material-mkdocs主题。如果你在OI-WIKI页面打开控制台,会发现有一行404报错。这是因为此主题在指定了仓库地址时会自动获取Stars数、forks数和最新release名,但OI-WIKI没有任何release。这完全不影响界面加载,但控制台报错令人不满,可惜目前还没有简单的配置项用于关闭release检索。
时间复杂度的大 O 符号的实际定义指得是大于等于上界的整个范围。比如归并排序的大O可以写作O(N*logN)、也可以写作O(2^N),因为O(2^N)>O(N*logN)。但是你不应该使用后者,实际使用大O表示的即使不是最紧上界也应该接近最紧上界,否则应该使用“复杂度小于O(…)”这样的表达。
GAMES104课程的Piccolo引擎,使用的第三方库和Vulkan-tutorial的内容基本一致(Vulkan + GLM + GLFW + STB + tinyobjloader + vulkanMemoryAllocator)。但是把第三方库代码直接放在了项目中,其中几个库的CMake配置现在过时。编译时可能需要修改GLM和tinyobjloader库的CMakeLists.txt,将CMake最小版本设为3.10以上。
微软的C++参考文档的网页title是C#文档(2025/06/07):C# 文档 – 入门、教程、参考。 | Microsoft Learn
编程语言的第一步是“Hello World!”,而图形学编程则是渲染三角形。但是使用Vulkan(C风格接口)绘制第一个三角形就需要900行代码!!(使用Vulkan-hpp(C++封装)或Vulkano(Rust封装)则需要约700行代码。)
下面的游戏有两个(纯策略)纳什均衡点:
UserY : S0 | UserY : S1 | |
UserX : S0 | 1 , 1 | 0 , 0 |
UserX : S1 | 0 , 0 | 0 , 0 |
米哈游启动器是用QT5做的。而VSCode是用Electron做的(用Electron做的都比 Visual Studio 用起来“流畅”)。
#include <iostream> struct A{ char a[2]{'3', '4'}; }; auto main() -> int{ const auto& [b] = A{}; std::cout << 1[b] << std::endl; }
上述代码的输出是4,这里涉及了哪些语法?
Cppreference中并没有“编译期多态/静态多态”这一概念。此概念一般指的是函数重载和运算符重载,Cppref中有重载决议和运算符重载章节,提供了极其细致的说明。这里的重点是,它并没有提及所谓的“编译期多态”概念。
所以有人粗读过Cppref但想不起来静态多态也很合理
你知不知道我知道你不知道我知道你不知道我不知道?