- 博客(524)
- 资源 (49)
- 问答 (8)
- 收藏
- 关注
原创 Snipaste 截图工具
Snipaste是一款以“贴图”为核心,兼具像素级精准截图、专业标注与极致轻量的全能生产力神器。它的核心优势可以总结为以下三点:独创“贴图”功能:能将截图或文本一键钉在屏幕最前端,支持缩放、透明和鼠标穿透,是代码比对、多任务办公的“物理外挂”。像素级精准与丰富标注:自动吸附 UI 元素边界,告别截图错位;内置箭头、马赛克、取色等全套专业编辑工具,无需切换其他软件。极致轻量纯净:绿色免安装,后台几乎零资源占用,且完全免费、无广告、无捆绑,带来极致流畅的体验。
2026-06-12 10:38:54
544
原创 liburing 总结: 用户态库 · 深度解析
liburing三个 syscall 的薄 wrapper)—— §17.3。固定不变的模板代码:mmap 三块共享内存、计算所有指针偏移、release/acquire 屏障 —— §17.2 + §17.4 + §17.5。每一个的 SQE 填充模板:102 个,让你不必直接动 64 字节裸结构体 —— §17.15。常见组合的便利函数cqe_seen... —— 散落在 §17.6–§17.14。它不引入任何运行时行为、状态机或线程模型。
2026-05-14 16:21:10
604
原创 io_uring
了解io_uring,可以看看如下link文章:https://blog.csdn.net/LAN_chen_ning/article/details/159965083https://cloud.tencent.com/developer/article/2651888
2026-05-14 14:46:33
110
原创 C++函数重载
上下文示例1变量声明初始化2赋值表达式p = fun;3函数实参4return 语句return fun;5用户自定义 operator6强制类型转换7成员函数指针 ⚠️&Foo::mf(必须加普通函数取地址可省(函数到指针的隐式转换),但类成员函数取地址不能省略——这是 C++ 标准的明确要求,也是本题的核心考点。
2026-04-29 17:00:46
410
原创 自定义 range-for
Iter把 range-for 的展开再贴一遍:for (;__begin!= __end;__begin!= __end→ 必须有operator!(对应 C)++__begin→ 必须有operator++(对应 B,前缀版本)*__begin→ 必须有operator*(对应 A)至于:这个赋值发生在循环变量(如)上,由元素类型 T 的拷贝/转换负责,与完全无关。所以 D 是干扰项。容器层:提供begin()和end()。迭代器层:返回的对象必须支持++!。
2026-04-28 11:17:43
260
原创 operator new 和 placement new
不能重载 new/delete 表达式本身——你只能改变其中"分配/释放内存"那一步,不能改变 new 表达式"先分配再构造、delete 表达式"先析构再释放"这一固定语义。+ 构造函数"这个分解,几乎所有 C++ 动态内存的"奇怪行为"都会变得自然——包括 placement new、零长数组、自定义分配器、内存池,乃至。// 2) 在已分配内存上构造对象(这一步才是 placement new)// 4) 显式调用析构函数(关键:placement new 没分配内存,
2026-04-28 11:06:33
421
原创 operator type() 转换函数(Type Conversion Operator)
/ 输出 0,不是 silver!// 输出 silver。// 显式转换(C++11)if (m == 0) { /* 你以为比较 Money,实际比较 double */ }// 隐式转换(C++98)// 隐式调用 operator double()// = a = (b = c);3 * 5 / 4 // = (3*5)/4 = 3 (左结合)std::cout << b;// 编译错误:二义性。if (sp) { /* OK:上下文转换 */ }-++i // = -(++i) (右结合)
2026-04-28 10:06:50
349
原创 thread_local介绍
thread_local 的本质:只规定 生命周期 = 线程生命周期,不限制地址被传到其他线程使用,但跨线程使用 TLS 地址非常危险(生命周期未对齐 → UB)
2026-04-27 15:50:11
292
原创 全局变量初始化与销毁
B globalB;globalA和globalB谁先构造是未定义的——这就是著名的 Static Initialization Order Fiasco (SIOF)。如果B的构造函数依赖A已经构造好,就会踩坑。
2026-04-27 15:41:14
321
原创 std::shared_ptr的别名构造函数
Aliasing constructor 的本质:让一个 shared_ptr "搭便车"延长另一个对象的生命周期,同时对外暴露不同的指针视图。
2026-04-27 15:14:33
240
原创 当 使用 Pimpl 方式 时,在 实现文件 中定义特殊成员函数
~Widget() 确实必须放到看到完整 Impl 定义的地方去生成。因为 std::unique_ptr<Impl> 销毁时会走 default_delete<Impl>,而 delete Impl* 需要 Impl 是完整类型。
2026-04-27 14:40:26
351
原创 std::includes std::search std::find std::mismatch
是 C++ 标准库中的一个算法,用于检查一个已排序的范围是否包含另一个已排序的范围。
2026-04-23 10:05:32
411
原创 12.1 函数上移
重复的两个函数现在也许能够正常工作,但假以时日却只会成为滋生bug的温床。无论何时,只要系统内出现重复,你就会面临“修改其中一个却未能修改另一个”的风险。通常,找出重复也有一定的难度。检查两个类的函数时我发现,两个函数都引用了monthlyCost属性,但后者并未在超类中定义,而是在两个子类中各自定义了一份实现。如果某个函数在各个子类中的函数体都相同(它们很可能是通过复制粘贴得到的),这就是最显而易见的函数上移适用场合。然后,我从其中一个子类中将annualCost函数复制到超类。
2026-04-22 09:30:35
36
原创 11.3 移除标记参数
如果调用者传入的是程序中流动的数据,这样的参数不算标记参数;如果一个函数有多个标记参数,可能就不得不将其保留,否则我就得针对各个参数的各种取值的所有组合情况提供明确函数。拿到一份API以后,我首先看到的是一系列可供调用的函数,但标记参数却隐藏了函数调用中存在的差异性。保持对象完整经常发生在引入参数对象(140)之后,我会搜寻使用原来的数据泥团的代码,代之以使用新的对象。如果我看见代码从一个记录结构中导出几个值,然后又把这几个值一起传递给一个函数,我会更愿意把整个记录传给这个函数,在函数体内部导出所需的值。
2026-04-22 09:25:01
187
原创 10.1 分解条件表达式
我必须编写代码来检查不同的条件分支,根据不同的条件做不同的事,然后,我很快就会得到一个相当长的函数。大型函数本身就会使代码的。,根据每个小块代码的用途,为分解而得的新函数命名,并将原函数中对应的代码改为调用新函数,从而。提炼完成后,我喜欢用三元运算符重新安排条件语。和任何大块头代码一样,我可以将它。
2026-04-22 09:18:36
353
原创 vector<shared_ptr> vs shared_ptr<vector>
shared_ptr<vector<T>>:“整张表作为一个整体被共享”,紧凑、缓存友好,是性能敏感场景的优化形态;把一个元素“借给”外部长期持有比较别扭,需要用 shared_ptr<vector<T>> + 下标,或者再做一层 aliasing shared_ptr。支持多态:可以存派生类(vector<shared_ptr<Base>> 存 shared_ptr<Derived>)。vector<shared_ptr<T>>:“每个元素单独被共享”,安全、灵活、能多态,是默认选择。
2026-04-21 16:35:22
402
原创 const_cast 运算符详解与未定义行为深度分析
/ ❌ 未定义行为// 声明为const*pj = 4;// 未定义行为!// 关键证据:打印地址std::cout << "=== 地址验证 ===" << std::endl;std::cout << "j 的地址: " << &j << std::endl;std::cout << "pj 的值: " << pj << std::endl;std::cout << "\n=== 值的对比 ===" << std::endl;// 输出: 3// 输出: 4。
2026-04-21 15:53:21
245
原创 std::ranges::all_of, std::ranges::any_of, std::ranges::none_of
std::all_of: true(“所有元素都满足”在逻辑上是空集的真命题,称为真空真理 / vacuous truth)all_of 返回 true 不代表“真的有满足的元素”,只表示没有发现不满足的元素。如果语义上你需要“至少一个满足”,应使用 any_of 而不是 all_of。std::any_of: false(没有元素可以使谓词为 true)std::none_of: true(没有元素违反“都不是”这一条件)any_of 做“存在”判断,空集不存在满足者 → false。
2025-10-28 14:04:31
364
原创 Google 是如何做 Code Review 的?
作者 | 帅昕 xindoo责编 | 屠敏出品 | CSDN 博客我和几个小伙伴一起翻译了Google前一段时间放出来的Google’s Engineering Practices documentation(https://github.com/google/eng-practices),翻译后的GitHub仓库:https://github.com/xindoo/eng-pract...
2025-08-04 17:12:46
1171
原创 std::ranges::iota
你可以使用生成enumchar, 或int value;// 构造函数// operator++ (前置递增)++value;// 比较运算符return!int main()要求类型支持operator++(即满足特性描述惰性生成元素按需生成,不占用内存无限或有限序列可以无限增长,也可以指定边界类型支持任何可自增类型,如整数、枚举、时间点常与配合限制无限序列长度范围特性支持 forward range,支持迭代算法形式描述无限递增从 5 开始。
2025-05-19 15:39:54
1575
原创 std::ranges::views::drop 和 std::ranges::drop_view
和是 C++20 引入的范围适配器,用于创建一个跳过前 N 个元素的新视图。
2025-05-19 15:17:55
1047
原创 std::ranges::views::stride 和 std::ranges::stride_view
是 C++23 中引入的一个范围适配器,用于创建一个视图,该视图只包含原始范围中每隔 N 个元素的元素(即步长为 N 的元素)。
2025-05-19 15:10:34
1134
原创 std::ranges::views::zip, zip_transform 和 std::ranges::zip_view, zip_transform_view
和是 C++23 中引入的用于将多个范围组合成一个元组序列的视图适配器。在标头<ranges>定义requires (inline constexpr /* 未指明 */ zip = /* 未指明 */;调用签名requires /* 见下文 */1)zip_view是范围适配器,接收一或多个并产生一个,其第i个元素是所有视图的第i个元素组成的元组式值。所产生视图的大小为所有适配视图的最小大小。2)views::zip是定制点对象。无实参调用时 views::zip()于 auto(<>>)。
2025-05-19 11:30:52
1058
原创 std::ranges::views::repeat, std::ranges::repeat_view
是 C++20 引入的一个范围适配器,用于生成一个无限序列,其中所有元素都是同一个值的重复。是其对应的范围适配器对象。
2025-05-19 11:27:09
332
原创 std::ranges::views::as_const 和 std::ranges::as_const_view
是 C++23 引入的视图适配器,用于生成一个不可变的视图,确保通过该视图访问元素时,元素被视为常量。inline constexpr /* 未指明 */ as_const = /* 未指明 */;提供了一种类型安全的方式,确保通过视图访问的元素不可修改。适用于需要强制数据只读性的场景,增强代码安全性和可维护性。与标准算法和其他视图适配器无缝结合,支持复杂的链式操作。生成一个惰性视图,不复制数据,仅在访问时应用常量性。若元素可修改,通过视图访问时变为。仅修改类型系统,运行时无性能损失。对象,表示只读视图。
2025-05-19 11:10:04
585
原创 ranges::views::adjacent_transform, ranges::adjacent_transform_view, ranges::views::pairwise_transfor
constexpr /* 未指明 */ adjacent_transform = /* 未指明 */;constexpr /*范围适配器闭包*/ adjacent_transform<N>( F&& fun );是 C++23 中引入的范围适配器,用于对输入范围的相邻元素应用函数并生成转换后的结果。个相邻元素作为参数传递给函数,生成转换后的结果视图。个参数,类型与输入元素的(可能投影后的)类型匹配。的扩展,结合了滑动窗口和惰性变换的功能。大于输入范围的大小,生成的视图为空。的别名,专门处理相邻的两个元素。
2025-05-19 11:05:20
761
原创 std::ranges::views::adjacent, std::ranges::adjacent_view, std::ranges::views::pairwise
是 C++23 中引入的范围适配器,用于生成输入范围中相邻元素的元组。它们提供了一种简洁的方式处理滑动窗口操作,适用于需要连续元素组合的场景。constexpr /* 未指明 */ adjacent = /* 未指明 */;元组的生成是惰性的,遍历时按需生成,时间复杂度为 O(n)。作为惰性视图,适用于大规模数据处理,避免不必要的内存开销。生成的元组是连续且重叠的(滑动步长为1),而。的别名,生成相邻两个元素的元组(即。大于输入范围长度,生成的视图为空。对象,表示相邻元素的元组视图。
2025-05-19 10:57:58
698
原创 std::ranges::find_last, std::ranges::find_last_if, std::ranges::find_last_if_not
的元素。它们返回一个子范围(
2025-05-19 10:52:23
761
原创 std::ranges::views::chunk, std::ranges::chunk_view, std::ranges::views::chunk_by, std::ranges::chunk
是一个强大的范围适配器,特别适合需要基于相邻元素关系对序列进行分组的场景。它提供了一种声明式的方式来处理这类问题,使代码更加简洁和表达性强。<ranges>
2025-05-19 10:48:15
1163
原创 std::ranges::starts_with 和 std::ranges::ends_with
int age;// 示例4:自定义比较(不区分大小写)// true// 示例5:投影使用people,{}, // 默认比较&Person::name // 投影到 Person::name// true。
2025-05-19 10:33:38
988
原创 flat_map, flat_set, flat_multimap, flat_multimap
性能:xhttps://zhuanlan.zhihu.com/p/661418250。
2025-05-18 17:46:42
1319
原创 std::stacktrace
是 C++23 引入的标准库组件,用于在运行时捕获、存储和操作调用栈信息。它类似于其他语言(如 Python 的traceback或 Java 的)的堆栈跟踪功能,帮助开发者调试或记录程序执行路径。
2025-05-18 09:42:59
528
原创 C++20 小语法
对于严格的C++ 编译器来说,以前在这种情境下int无法向下转换为bool,需要手动强制转换,这个提案允许在static_assert和if constexpr中从整形转换为布尔类型。C++23 这一情况得到了改善。以下表格就可以表示所有内容。
2025-04-28 22:22:02
548
原创 auto(x) decay copy
元素和欲移除元素,若不相等,则用当前元素覆盖当前__result 迭代器的值,然后__result 向后移一位。std::remove() 最终调用的是remove_if(),因此关键就在这个算法里面。请注意该程序的输出,是否如你所想的一样。foo() 中调用bar(),希望传递一份param 的拷贝,则我们需要单独多声明一个临时变量。而auto{x} 和auto(x),就相当于这个copy() 函数,只不过它是内建到语言里面的而已。然而这种方式是非常反直觉的,一般来说这两种写法的效果应该是等价的。
2025-04-28 22:20:46
431
原创 std::print 和 std::println
std::print和是 C++23 新增的格式化输出函数,旨在替代传统的std::cout链式调用。它们基于实现,支持类型安全的格式化字符串,语法更简洁,性能更优15。直接输出到stdout(默认)或指定的流。自动在输出末尾添加换行符。支持与相同的格式化语法(如{}占位符)。
2025-04-28 22:02:20
2013
毕业设计论文:电子信息管理系统
2010-04-24
total commander
2012-03-29
gvim编辑器 加强版vim
2012-04-15
Unix网络编程实用技术与实例分析
2011-11-06
slickedit2014 V19
2015-02-01
slickedit 2016(v21) pro crack 破解
2016-11-25
sourceinsight4.0.0085
2017-04-10
xshell V4.0
2015-07-08
C++ Concurrency_In_Action c++11多线程编程
2017-03-01
小新v4000安装win10系统,请问如何修改默认快捷键?
2015-10-14
linux上slickedit如何调试守护进程?有么有调试过的?能否详细说明下
2015-08-27
centos6.5 64位上gdb调试无法使用了
2015-06-25
net-snmp中通过subagent方法,如何把多个Table编译成一个可执行文件?
2015-06-09
net-snmp在agent端如何实现MODE_GETNEXT的代码?
2015-06-03
net-snmp表中数据的获取、添加、修改、删除是怎么实现的?
2015-06-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅