<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[TIME_LEAF的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/TIME_LEAF</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; TIME_LEAF]]></copyright><item><title><![CDATA[C++里的统一初始化：花括号走天下]]></title><link>https://blog.youkuaiyun.com/TIME_LEAF/article/details/151922595</link><guid>https://blog.youkuaiyun.com/TIME_LEAF/article/details/151922595</guid><author>TIME_LEAF</author><pubDate>Sun, 21 Sep 2025 09:52:26 +0800</pubDate><description><![CDATA[C++11统一初始化({})解决了初始化语法的混乱问题，支持所有类型初始化，包括内置类型、数组和容器。相比传统方式，它能防止窄化转换带来的精度损失，提高类型安全性。对类成员初始化更优雅，可直接在声明时赋默认值。但需注意当类存在initializer_list构造函数时，{}会优先匹配该构造函数。统一初始化提升了代码一致性、安全性和可读性，是推荐的初始化方式。]]></description><category></category></item><item><title><![CDATA[网络抓包神器：tcpdump 的常用技巧]]></title><link>https://blog.youkuaiyun.com/TIME_LEAF/article/details/151654627</link><guid>https://blog.youkuaiyun.com/TIME_LEAF/article/details/151654627</guid><author>TIME_LEAF</author><pubDate>Sat, 13 Sep 2025 17:04:12 +0800</pubDate><description><![CDATA[摘要：本文介绍了Linux下轻量级抓包工具tcpdump的使用技巧。作者首先指出在嵌入式环境中tcpdump比Wireshark更加实用，然后详细讲解了基本命令格式、必备参数（-nn、-s0、-vv、-l等）、常用过滤表达式（按主机、端口、协议等）以及抓包结果保存与分析方法。文章还提供了多个典型应用场景示例，并给出使用建议，如实时观察时加-l参数、先用大范围再缩小过滤范围等。最后强调掌握这些技巧可以快速定位大多数网络问题，是运维和开发中的实用工具。]]></description><category></category></item><item><title><![CDATA[C++ std::optional，让代码更优雅]]></title><link>https://blog.youkuaiyun.com/TIME_LEAF/article/details/151020810</link><guid>https://blog.youkuaiyun.com/TIME_LEAF/article/details/151020810</guid><author>TIME_LEAF</author><pubDate>Sat, 30 Aug 2025 15:57:37 +0800</pubDate><description><![CDATA[C++17引入的std::optional提供了一种优雅的解决方案，用于处理&quot;可能有值可能无值&quot;的场景。相比传统使用特殊值(-1/nullptr)或输出参数的方式，std::optional使代码更清晰、更安全。文章介绍了其基本用法，包括创建、判断和取值操作，并展示了三个典型应用场景：表示可能失败的返回值、替代&quot;bool+输出参数&quot;模式以及作为可选函数参数。这个小工具能显著提升代码可读性和健壮性，值得在项目中推广应用。]]></description><category></category></item><item><title><![CDATA[程序卡住了？先不要Kill！GDB来救你！]]></title><link>https://blog.youkuaiyun.com/TIME_LEAF/article/details/150700971</link><guid>https://blog.youkuaiyun.com/TIME_LEAF/article/details/150700971</guid><author>TIME_LEAF</author><pubDate>Sun, 24 Aug 2025 14:32:21 +0800</pubDate><description><![CDATA[当程序卡住但不崩溃时，不要直接kill -9重启。可用gdb调试工具分析：1)通过ps aux查找进程PID；2)用sudo gdb -p &lt;PID&gt;连接进程；3)执行thread apply all bt查看所有线程调用栈。通过栈信息可判断死锁、IO阻塞或死循环等问题。文中用C++死锁示例演示了该方法，能清晰定位线程卡在锁获取的位置。这种方法能有效保留现场，快速定位问题根源。]]></description><category></category></item><item><title><![CDATA[使用C++做一个进度条]]></title><link>https://blog.youkuaiyun.com/TIME_LEAF/article/details/149667211</link><guid>https://blog.youkuaiyun.com/TIME_LEAF/article/details/149667211</guid><author>TIME_LEAF</author><pubDate>Sat, 26 Jul 2025 15:01:56 +0800</pubDate><description><![CDATA[摘要：通过ANSI转义序列实现终端动态输出效果。使用\033[2K\r清除当前行并返回行首，结合C++实现进度百分比和彩色进度条。示例代码展示了如何动态刷新输出，提升命令行程序的交互体验。该技巧适用于状态更新和命令行动画效果，让终端输出更生动有趣。]]></description><category></category></item><item><title><![CDATA[C++ 引用魔法揭秘：std::move 和 std::forward 的真相]]></title><link>https://blog.youkuaiyun.com/TIME_LEAF/article/details/149667156</link><guid>https://blog.youkuaiyun.com/TIME_LEAF/article/details/149667156</guid><author>TIME_LEAF</author><pubDate>Sat, 26 Jul 2025 14:57:28 +0800</pubDate><description><![CDATA[摘要：本文深入讲解C++中的两个重要工具函数std::move和std::forward。std::move本质是类型转换工具，将左值转为右值以触发移动构造/赋值，而非真正移动数据。std::forward则用于完美转发，在模板编程中保持参数原始值类别（左值/右值）。通过代码示例展示了它们的使用场景和运行效果，帮助读者理解这两个关键函数在C++移动语义和泛型编程中的作用。文章强调正确理解这两个工具对提升C++编程效率的重要性。]]></description><category></category></item><item><title><![CDATA[Wireshark 显示过滤实战技巧：快速锁定你要的包]]></title><link>https://blog.youkuaiyun.com/TIME_LEAF/article/details/149205966</link><guid>https://blog.youkuaiyun.com/TIME_LEAF/article/details/149205966</guid><author>TIME_LEAF</author><pubDate>Tue, 08 Jul 2025 20:30:58 +0800</pubDate><description><![CDATA[《Wireshark显示过滤实用指南》摘要：本文介绍了Wireshark显示过滤器的核心用法，帮助用户从海量数据包中精准定位目标。关键技巧包括：1）端口/IP地址过滤（如udp.port==12345、ip.src==192.168.1.100）；2）逻辑组合（AND/OR/NOT）；3）协议筛选（http/dns等）；4）右键快速生成表达式等实用功能。文章还提供了保存常用过滤器和自定义颜色高亮等进阶技巧，通过"协议.字段 运算符 值"的标准表达式格式，让网络流量分析更加高效直观。
]]></description><category></category></item><item><title><![CDATA[深入理解 C++ 中的引用：左值引用与右值引用]]></title><link>https://blog.youkuaiyun.com/TIME_LEAF/article/details/148961517</link><guid>https://blog.youkuaiyun.com/TIME_LEAF/article/details/148961517</guid><author>TIME_LEAF</author><pubDate>Fri, 27 Jun 2025 22:09:52 +0800</pubDate><description><![CDATA[本文介绍了C++的左值引用与右值引用]]></description><category></category></item><item><title><![CDATA[C++左值、右值你分清了吗]]></title><link>https://blog.youkuaiyun.com/TIME_LEAF/article/details/148674242</link><guid>https://blog.youkuaiyun.com/TIME_LEAF/article/details/148674242</guid><author>TIME_LEAF</author><pubDate>Sun, 15 Jun 2025 19:21:35 +0800</pubDate><description><![CDATA[本文简明解析了C++中左值(Lvalue)与右值(Rvalue)的核心区别。左值是有名称、可获取地址的持久实体（如变量），右值则是临时生成、无法取地址的表达式结果（如计算值或函数返回值）。通过具体代码示例和对比表格，文章清晰展示了两者在身份、地址获取、生命周期等方面的关键差异。理解这一基础概念对C++编程、调试和优化至关重要，特别是掌握&quot;是否有名&quot;&quot;能否取地址&quot;&quot;是否临时&quot;三个判断标准，能够帮助开发者正确处理相关编译问题。]]></description><category></category></item><item><title><![CDATA[GTest进阶：使用Test Fixture、Mock与覆盖率构建可维护的单元测试]]></title><link>https://blog.youkuaiyun.com/TIME_LEAF/article/details/148495242</link><guid>https://blog.youkuaiyun.com/TIME_LEAF/article/details/148495242</guid><author>TIME_LEAF</author><pubDate>Sat, 07 Jun 2025 14:39:26 +0800</pubDate><description><![CDATA[本文通过一个加法器案例，详细讲解了GTest的高级应用技巧。首先介绍了Test Fixture（测试夹具）的使用方法，通过继承::testing::Test来共享测试初始化和清理逻辑；其次演示了如何使用Mock模拟依赖对象的行为；最后指导了如何利用lcov工具生成代码覆盖率报告。文章通过具体代码示例，展示了如何测试加法器的正常和溢出场景，并分析了覆盖率未达100%的原因。这些方法可以帮助开发者编写更清晰、可维护的测试代码，并评估测试的完]]></description><category></category></item><item><title><![CDATA[使用GTest进行单元测试的简明指南]]></title><link>https://blog.youkuaiyun.com/TIME_LEAF/article/details/148367510</link><guid>https://blog.youkuaiyun.com/TIME_LEAF/article/details/148367510</guid><author>TIME_LEAF</author><pubDate>Sun, 01 Jun 2025 16:34:47 +0800</pubDate><description><![CDATA[本文介绍了如何使用Google Test(GTest)框架进行C++单元测试。通过一个简单的加法函数示例，展示了从零搭建测试环境的过程，包括项目结构、代码实现、测试编写和CMake配置。文章强调单元测试的重要性，它能早期发现bug、增强代码信心、提供文档和满足流程要求。示例项目包含头文件、实现文件和测试文件，使用CMake管理构建流程，演示了基本的EXPECT_EQ断言用法。最后指出单元测试的实际价值并提供了代码仓库地址，鼓励开发者将单元测试作为开发习惯。]]></description><category></category></item><item><title><![CDATA[为什么要学会Rebase，而不总是用Merge]]></title><link>https://blog.youkuaiyun.com/TIME_LEAF/article/details/148196225</link><guid>https://blog.youkuaiyun.com/TIME_LEAF/article/details/148196225</guid><author>TIME_LEAF</author><pubDate>Sat, 24 May 2025 21:09:13 +0800</pubDate><description><![CDATA[摘要： 本文深入解析git rebase的核心机制，通过与git merge对比，揭示其&quot;重写分支基础&quot;的本质。当主分支更新时，rebase将特性分支的提交重新应用到最新主分支节点（如C→C'），形成线性历史，避免冗余合并节点。操作流程包括：创建分支→主分支更新→执行rebase→处理冲突。关键注意：rebase会改写提交历史，适合本地分支整理，但需谨慎用于已共享的远程分支。掌握该技巧可使Git历史更简洁清晰。（150字）]]></description><category></category></item><item><title><![CDATA[Git时间旅行：优雅地改写历史提交]]></title><link>https://blog.youkuaiyun.com/TIME_LEAF/article/details/148042128</link><guid>https://blog.youkuaiyun.com/TIME_LEAF/article/details/148042128</guid><author>TIME_LEAF</author><pubDate>Sun, 18 May 2025 12:06:50 +0800</pubDate><description><![CDATA[本文介绍了如何在 Git 中优雅且安全地修改提交历史。首先，文章解释了 Git 历史的本质，强调每个提交都有唯一的哈希值，任何修改都会生成新的哈希。接着，文章详细讲解了在个人分支上修改历史的方法，包括使用 --amend 修改最近一次提交和通过 rebase 修改更早的提交。最后，文章提醒在多人协作中修改历史的风险，建议谨慎使用强制推送，并提出了三个问题以帮助判断是否适合修改历史。文章旨在帮助开发者更好地维护 Git 提交记录，同时避免在协作中引发问题。]]></description><category></category></item><item><title><![CDATA[Git Merge实战手册：分支合并的智慧]]></title><link>https://blog.youkuaiyun.com/TIME_LEAF/article/details/147854359</link><guid>https://blog.youkuaiyun.com/TIME_LEAF/article/details/147854359</guid><author>TIME_LEAF</author><pubDate>Sat, 10 May 2025 15:50:59 +0800</pubDate><description><![CDATA[本文详细介绍了Git合并的原理、策略及冲突解决方法。合并的本质是寻找两个分支的共同祖先，通过差异对比生成新版本。常见的合并策略包括普通合并（Fast-Forward）、保留历史的合并（--no-ff）和压缩合并（Squash），分别适用于不同场景。合并冲突时，Git会标记冲突部分，开发者需手动解决并提交。文章还提供了合并前的预演、日志分析、更新本地分支等建议，帮助开发者避免常见问题，提升团队协作效率。掌握这些技巧，能有效应对合并中的各种挑战。]]></description><category></category></item><item><title><![CDATA[C++ 数据结构之std::vector介绍]]></title><link>https://blog.youkuaiyun.com/TIME_LEAF/article/details/147672993</link><guid>https://blog.youkuaiyun.com/TIME_LEAF/article/details/147672993</guid><author>TIME_LEAF</author><pubDate>Fri, 02 May 2025 22:27:48 +0800</pubDate><description><![CDATA[std::vector是C++标准库中的动态数组，能够自动管理内存大小，适用于处理不确定数量的数据。其关键特性包括动态伸缩、快速访问和内存连续排列。核心操作包括创建与初始化、增删元素和随机访问。进阶操作涉及处理动态对象，如游戏中的敌人。性能优化建议包括预分配空间、选择正确的构造方式、高效删除技巧和利用现代C++特性。避坑指南提醒避免盲目使用[]操作符、在循环中反复扩容和忽视迭代器失效问题。std::vector是处理动态数组时的首选工具，合理使用可显著提升程序效率。]]></description><category></category></item><item><title><![CDATA[C++ UML 类图介绍]]></title><link>https://blog.youkuaiyun.com/TIME_LEAF/article/details/146989131</link><guid>https://blog.youkuaiyun.com/TIME_LEAF/article/details/146989131</guid><author>TIME_LEAF</author><pubDate>Thu, 03 Apr 2025 21:40:37 +0800</pubDate><description><![CDATA[UML类图是面向对象分析与设计中的核心工具，用于描述系统的静态结构。它通过展示类、接口、属性、方法及其之间的关系，帮助开发者理解系统架构，减少沟通成本，并为系统实现提供可视化方案。类图的核心组成部分包括类（Class）和接口（Interface），类用矩形表示，分为类名、属性和方法三部分，接口则用带&lt;&lt;interface&gt;&gt;的矩形表示，仅包含方法声明。类之间的关系包括依赖（Dependency）、关联（Association）、聚合（Aggregation）、组合（Compositi]]></description><category></category></item><item><title><![CDATA[在C语言中，可以用free释放NULL吗？]]></title><link>https://blog.youkuaiyun.com/TIME_LEAF/article/details/146267949</link><guid>https://blog.youkuaiyun.com/TIME_LEAF/article/details/146267949</guid><author>TIME_LEAF</author><pubDate>Fri, 14 Mar 2025 21:46:47 +0800</pubDate><description><![CDATA[在C语言中，动态分配的内存需要通过free函数手动释放，以避免内存泄漏。当指针可能为空时，调用free(ptr)是否安全？根据C99标准，free函数在ptr为空指针时不执行任何操作，因此释放空指针是安全的，不会导致程序崩溃或未定义行为。这一特性简化了代码编写，并提高了程序的健壮性。在实际编程中，建议在释放指针后将其设置为NULL，以避免悬空指针问题。这一设计避免了额外的检查负担，确保了free(NULL)的安全性。]]></description><category></category></item><item><title><![CDATA[C++ 格式化输出浮点数]]></title><link>https://blog.youkuaiyun.com/TIME_LEAF/article/details/145935895</link><guid>https://blog.youkuaiyun.com/TIME_LEAF/article/details/145935895</guid><author>TIME_LEAF</author><pubDate>Fri, 28 Feb 2025 18:51:54 +0800</pubDate><description><![CDATA[在性能分析或日志记录中，打印时间戳并比较其差异时，C++默认的浮点数输出格式可能导致时间戳显示不直观。默认情况下，C++会根据数值大小自动选择固定小数格式或科学计数法格式，当数值超出[1e-4, 1e6]范围时，会使用科学计数法。为了解决这一问题，可以使用std::fixed强制浮点数以固定小数格式输出，并结合std::setprecision控制小数点后的位数。通过这种方式，可以确保时间戳以固定小数格式输出，清晰展示具体的时间值。]]></description><category></category></item><item><title><![CDATA[Windows安装Ubuntu24.04双系统指南]]></title><link>https://blog.youkuaiyun.com/TIME_LEAF/article/details/145648825</link><guid>https://blog.youkuaiyun.com/TIME_LEAF/article/details/145648825</guid><author>TIME_LEAF</author><pubDate>Sat, 15 Feb 2025 12:24:32 +0800</pubDate><description><![CDATA[本文详细介绍了在Windows电脑上安装Ubuntu 24.04双系统的步骤。首先，准备工作包括备份数据、下载Ubuntu ISO镜像、制作启动U盘，并通过磁盘管理为Ubuntu腾出至少50GB的空间。接着，系统设置部分指导用户关闭Windows的快速启动功能，并在BIOS中确保启动模式为UEFI、关闭安全启动、将SATA配置为AHCI模式。最后，安装Ubuntu的步骤包括从U盘启动、选择语言、键盘布局、网络连接、安装方式（选择与Windows共存）、创建用户、选择时区等。安装完成后，用户可以通过GRUB菜]]></description><category></category></item><item><title><![CDATA[如何将tag推送到远程仓库]]></title><link>https://blog.youkuaiyun.com/TIME_LEAF/article/details/144313644</link><guid>https://blog.youkuaiyun.com/TIME_LEAF/article/details/144313644</guid><author>TIME_LEAF</author><pubDate>Sat, 07 Dec 2024 17:40:11 +0800</pubDate><description><![CDATA[在多人协作的软件开发项目中，tag（标签）是Git中用于标记和管理版本的重要机制。通过为特定版本打上标签，可以方便集成人员拉取代码，提高版本的可追溯性。推送标签到远程仓库的操作包括：推送单个标签（git push origin &lt;tag_name&gt;）、推送多个标签（git push origin &lt;tag_name_1&gt; &lt;tag_name_2&gt;）、推送所有本地标签（git push origin --tags）以及删除远程标签（git push origin --del]]></description><category></category></item></channel></rss>