<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[rainsssssss的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/rainsssssss</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; rainsssssss]]></copyright><item><title><![CDATA[vscode shortcuts&cmd]]></title><link>https://blog.youkuaiyun.com/rainsssssss/article/details/163944729</link><guid>https://blog.youkuaiyun.com/rainsssssss/article/details/163944729</guid><author>rainsssssss</author><pubDate>Fri, 21 Aug 2026 14:35:24 +0800</pubDate><description><![CDATA[ctr + p。]]></description><category></category></item><item><title><![CDATA[C++ 不完整类型 (Incomplete Type) + 友元成员函数]]></title><link>https://blog.youkuaiyun.com/rainsssssss/article/details/163852386</link><guid>https://blog.youkuaiyun.com/rainsssssss/article/details/163852386</guid><author>rainsssssss</author><pubDate>Tue, 18 Aug 2026 12:51:35 +0800</pubDate><description><![CDATA[class Base;b->m_A = 1;// ❌ Base此时仍然incomplete！int m_A;关键点！很多人踩坑：虽然后续源码会定义Base；但是写在类体内的函数体，编译时机是解析Other类的时候，此时Base还没有定义，属于incomplete。✅解决：类内部只写函数声明，函数实现全部挪到所有类定义结束之后。]]></description><category></category></item><item><title><![CDATA[C++ 友元成员函数：前置声明、定义顺序问题]]></title><link>https://blog.youkuaiyun.com/rainsssssss/article/details/163849809</link><guid>https://blog.youkuaiyun.com/rainsssssss/article/details/163849809</guid><author>rainsssssss</author><pubDate>Tue, 18 Aug 2026 12:24:14 +0800</pubDate><description><![CDATA[标准称呼friend member function declaration dependency / 友元成员函数声明依赖问题incomplete‑type friend of a class / 不完整类型作为友元成员函数友元成员函数循环前置声明陷阱（循环类依赖 + 友元成员函数）核心根源：引用另一个类的成员函数；仅仅前向声明Other是 incomplete‑type（不完整类型），编译器只知道类名，不知道该类有哪些成员函数，所以不允许写。（友元整个类）只需要不完整类型，是允许的。形式。]]></description><category></category></item><item><title><![CDATA[C/C++ 杂记-1]]></title><link>https://blog.youkuaiyun.com/rainsssssss/article/details/163783793</link><guid>https://blog.youkuaiyun.com/rainsssssss/article/details/163783793</guid><author>rainsssssss</author><pubDate>Mon, 17 Aug 2026 21:37:13 +0800</pubDate><description><![CDATA[C++杂记]]></description><category></category></item><item><title><![CDATA[placement new(定位new)]]></title><link>https://blog.youkuaiyun.com/rainsssssss/article/details/163832315</link><guid>https://blog.youkuaiyun.com/rainsssssss/article/details/163832315</guid><author>rainsssssss</author><pubDate>Mon, 17 Aug 2026 20:47:28 +0800</pubDate><description><![CDATA[new (addr) (T);定位new]]></description><category></category></item><item><title><![CDATA[cin.fail（）== true]]></title><link>https://blog.youkuaiyun.com/rainsssssss/article/details/163831602</link><guid>https://blog.youkuaiyun.com/rainsssssss/article/details/163831602</guid><author>rainsssssss</author><pubDate>Mon, 17 Aug 2026 19:38:19 +0800</pubDate><description><![CDATA[cin.fail() = true]]></description><category></category></item><item><title><![CDATA[extern “C“ in C++]]></title><link>https://blog.youkuaiyun.com/rainsssssss/article/details/163365924</link><guid>https://blog.youkuaiyun.com/rainsssssss/article/details/163365924</guid><author>rainsssssss</author><pubDate>Fri, 31 Jul 2026 14:39:11 +0800</pubDate><description><![CDATA[extern "C"在混合语言工程中，最常见的做法是把extern "C"放在头文件声明处，这样 C 和 C++ 的翻译单元都能保持一致。如果声明和定义都按 C++ 编译，那么两边都必须约定使用 C 链接，否则不会得到 C 符号。extern "C"]]></description><category></category></item><item><title><![CDATA[C/C++ const -- 多义混乱]]></title><link>https://blog.youkuaiyun.com/rainsssssss/article/details/163160397</link><guid>https://blog.youkuaiyun.com/rainsssssss/article/details/163160397</guid><author>rainsssssss</author><pubDate>Fri, 24 Jul 2026 14:15:42 +0800</pubDate><description><![CDATA[﻿在编程里，constant 这个词是一词多义的；中文里的“常量”也是一词多义的。它们并不总是指同一个东西。混乱的根源在于：人们常常用“常量”来指至少四类东西：字面量、const 限定对象、编译期常量表达式、以及更宽泛的“不可变值”。]]></description><category></category></item><item><title><![CDATA[声明&定义]]></title><link>https://blog.youkuaiyun.com/rainsssssss/article/details/162935732</link><guid>https://blog.youkuaiyun.com/rainsssssss/article/details/162935732</guid><author>rainsssssss</author><pubDate>Thu, 16 Jul 2026 14:18:45 +0800</pubDate><description><![CDATA[本文阐述了C语言中声明（declaration）、定义（definition）与暂定定义（tentative definition）的关系与区别。核心要点包括：1）声明是广义概念，定义和暂定定义都是其子类；2）文件作用域的int a;属于暂定定义，若无其他定义则最终转为零初始化定义；3）函数内部的int a;直接就是定义；4）extern int a;仅为声明不分配存储；5）带初始化的int a=10;必定是定义。特别强调文件作用域int a;的"暂定"特性是C标准明确规定，需同时满足外部链接、无其他定义等]]></description><category></category></item><item><title><![CDATA[常量和常量表达式3. C&C++中的区别]]></title><link>https://blog.youkuaiyun.com/rainsssssss/article/details/159584644</link><guid>https://blog.youkuaiyun.com/rainsssssss/article/details/159584644</guid><author>rainsssssss</author><pubDate>Tue, 07 Apr 2026 01:21:13 +0800</pubDate><description><![CDATA[对于代码const int a = 5;int b = a + 10; C语言相应的汇编指令为`mov eax, [rbp-4]`（读a的内存）→ `add eax, 10` → `mov [rbp-8], eax`（赋值给b）；而C++的汇编指令为mov dword ptr [rbp-8], 0xF`（直接赋值15，无内存读取）；
]]></description><category></category></item><item><title><![CDATA[常量和常量表达式2. const int a = 5；]]></title><link>https://blog.youkuaiyun.com/rainsssssss/article/details/159584428</link><guid>https://blog.youkuaiyun.com/rainsssssss/article/details/159584428</guid><author>rainsssssss</author><pubDate>Sat, 28 Mar 2026 21:41:03 +0800</pubDate><description><![CDATA[const int a = 5;在c和c++中都是常量，但在c中为只读变量，而在c++中为真正的常量]]></description><category></category></item><item><title><![CDATA[常量和常量表达式1]]></title><link>https://blog.youkuaiyun.com/rainsssssss/article/details/159584217</link><guid>https://blog.youkuaiyun.com/rainsssssss/article/details/159584217</guid><author>rainsssssss</author><pubDate>Sat, 28 Mar 2026 21:35:45 +0800</pubDate><description><![CDATA[常量和常量表达式]]></description><category></category></item><item><title><![CDATA[栈向下增长与程序中的变量地址大小问题]]></title><link>https://blog.youkuaiyun.com/rainsssssss/article/details/159583600</link><guid>https://blog.youkuaiyun.com/rainsssssss/article/details/159583600</guid><author>rainsssssss</author><pubDate>Sat, 28 Mar 2026 17:09:16 +0800</pubDate><description><![CDATA[栈向下生长与变量地址大小问题]]></description><category></category></item><item><title><![CDATA[C语言中的宏函数要点]]></title><link>https://blog.youkuaiyun.com/rainsssssss/article/details/159580106</link><guid>https://blog.youkuaiyun.com/rainsssssss/article/details/159580106</guid><author>rainsssssss</author><pubDate>Sat, 28 Mar 2026 16:34:42 +0800</pubDate><description><![CDATA[1.不要加`；`,宏是进行`文本替换`，若有`；`会被作为文本内容一同替换进去，这可能导致语句中间出现`；`
2.参数括号的左括号应该紧贴宏函数名称
3.把整个宏函数的表示式用括号括起来
4.为宏函数的参数添加括号
5.警惕宏函数导致的多次副作用（`++i`多次作用）
6.多语句宏必须用 `do{...}while(0)`，不能用 `{}`，{}可能导致`else悬空`]]></description><category></category></item><item><title><![CDATA[计算机中的大小端]]></title><link>https://blog.youkuaiyun.com/rainsssssss/article/details/159577798</link><guid>https://blog.youkuaiyun.com/rainsssssss/article/details/159577798</guid><author>rainsssssss</author><pubDate>Sat, 28 Mar 2026 12:19:06 +0800</pubDate><description><![CDATA[本文探讨了数字存储的两种模式：自然手写数字的大端存储与计算机常见的小端存储。手写数字「13245」从左到右书写，对应低地址到高地址的存储，最高有效位（万位）位于低地址，最低有效位（个位）位于高地址，这符合大端模式。而计算机存储如0x12345678时，小端模式将最低有效字节（0x78）放在低地址，与大端相反。判断规则基于低地址存放的是高位数据（大端）还是低位数据（小端）。]]></description><category></category></item><item><title><![CDATA[argc & argv]]></title><link>https://blog.youkuaiyun.com/rainsssssss/article/details/159518369</link><guid>https://blog.youkuaiyun.com/rainsssssss/article/details/159518369</guid><author>rainsssssss</author><pubDate>Fri, 27 Mar 2026 00:45:12 +0800</pubDate><description><![CDATA[argc = 你在终端输了几个词（包括程序名）argv = 把你输的词存成字符串数组argv[0]永远是程序自己的名字。]]></description><category></category></item><item><title><![CDATA[escape character]]></title><link>https://blog.youkuaiyun.com/rainsssssss/article/details/158736444</link><guid>https://blog.youkuaiyun.com/rainsssssss/article/details/158736444</guid><author>rainsssssss</author><pubDate>Fri, 06 Mar 2026 14:32:38 +0800</pubDate><description><![CDATA[escape character ]]></description><category></category></item><item><title><![CDATA[linux下快捷删除单词、行的命令]]></title><link>https://blog.youkuaiyun.com/rainsssssss/article/details/151230719</link><guid>https://blog.youkuaiyun.com/rainsssssss/article/details/151230719</guid><author>rainsssssss</author><pubDate>Fri, 05 Sep 2025 20:53:36 +0800</pubDate><description><![CDATA[注意：Alt 键在部分终端/桌面环境会被截获，这时可以先按 Esc 作为 Meta（Alt）的替代键，再按后续键（例如 Esc + d 相当于 Alt+d）。Bash（和大多数终端默认使用的 readline）中的键绑定。一、在 readline（默认 Emacs 风格）下的常用键。三、在 Bash 使用 vi 模式（如果你习惯 vi 操作）复制/粘贴（readline 的 kill-ring）回到 emacs 模式：set -o emacs。启用：set -o vi。四、查看/修改当前绑定。]]></description><category></category></item><item><title><![CDATA[git命令解析]]></title><link>https://blog.youkuaiyun.com/rainsssssss/article/details/151230518</link><guid>https://blog.youkuaiyun.com/rainsssssss/article/details/151230518</guid><author>rainsssssss</author><pubDate>Fri, 05 Sep 2025 20:51:04 +0800</pubDate><description><![CDATA[远端 ≠ 整个站点；远端 = 仓库地址（在某个站点下的一个仓库）。]]></description><category></category></item><item><title><![CDATA[判断语句中std::cin隐式转换为bool--重载operator bool()]]></title><link>https://blog.youkuaiyun.com/rainsssssss/article/details/150973667</link><guid>https://blog.youkuaiyun.com/rainsssssss/article/details/150973667</guid><author>rainsssssss</author><pubDate>Fri, 29 Aug 2025 09:08:51 +0800</pubDate><description><![CDATA[std::cin隐式转换为bool类型]]></description><category></category></item></channel></rss>