- 博客(35)
- 收藏
- 关注
原创 C++ 不完整类型 (Incomplete Type) + 友元成员函数
class Base;b->m_A = 1;// ❌ Base此时仍然incomplete!int m_A;关键点!很多人踩坑:虽然后续源码会定义Base;但是写在类体内的函数体,编译时机是解析Other类的时候,此时Base还没有定义,属于incomplete。✅解决:类内部只写函数声明,函数实现全部挪到所有类定义结束之后。
2026-08-18 12:51:35
382
原创 C++ 友元成员函数:前置声明、定义顺序问题
标准称呼friend member function declaration dependency / 友元成员函数声明依赖问题incomplete‑type friend of a class / 不完整类型作为友元成员函数友元成员函数循环前置声明陷阱(循环类依赖 + 友元成员函数)核心根源:引用另一个类的成员函数;仅仅前向声明Other是 incomplete‑type(不完整类型),编译器只知道类名,不知道该类有哪些成员函数,所以不允许写。(友元整个类)只需要不完整类型,是允许的。形式。
2026-08-18 12:24:14
399
原创 extern “C“ in C++
extern "C"在混合语言工程中,最常见的做法是把extern "C"放在头文件声明处,这样 C 和 C++ 的翻译单元都能保持一致。如果声明和定义都按 C++ 编译,那么两边都必须约定使用 C 链接,否则不会得到 C 符号。extern "C"
2026-07-31 14:39:11
326
原创 C/C++ const -- 多义混乱
在编程里,constant 这个词是一词多义的;中文里的“常量”也是一词多义的。它们并不总是指同一个东西。混乱的根源在于:人们常常用“常量”来指至少四类东西:字面量、const 限定对象、编译期常量表达式、以及更宽泛的“不可变值”。
2026-07-24 14:15:42
382
原创 声明&定义
本文阐述了C语言中声明(declaration)、定义(definition)与暂定定义(tentative definition)的关系与区别。核心要点包括:1)声明是广义概念,定义和暂定定义都是其子类;2)文件作用域的int a;属于暂定定义,若无其他定义则最终转为零初始化定义;3)函数内部的int a;直接就是定义;4)extern int a;仅为声明不分配存储;5)带初始化的int a=10;必定是定义。特别强调文件作用域int a;的"暂定"特性是C标准明确规定,需同时满足外部链接、无其他定义等
2026-07-16 14:18:45
327
原创 常量和常量表达式3. C&C++中的区别
对于代码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,无内存读取);
2026-04-07 01:21:13
383
原创 常量和常量表达式2. const int a = 5;
const int a = 5;在c和c++中都是常量,但在c中为只读变量,而在c++中为真正的常量
2026-03-28 21:41:03
208
原创 C语言中的宏函数要点
1.不要加`;`,宏是进行`文本替换`,若有`;`会被作为文本内容一同替换进去,这可能导致语句中间出现`;`2.参数括号的左括号应该紧贴宏函数名称3.把整个宏函数的表示式用括号括起来4.为宏函数的参数添加括号5.警惕宏函数导致的多次副作用(`++i`多次作用)6.多语句宏必须用 `do{...}while(0)`,不能用 `{}`,{}可能导致`else悬空`
2026-03-28 16:34:42
542
原创 计算机中的大小端
本文探讨了数字存储的两种模式:自然手写数字的大端存储与计算机常见的小端存储。手写数字「13245」从左到右书写,对应低地址到高地址的存储,最高有效位(万位)位于低地址,最低有效位(个位)位于高地址,这符合大端模式。而计算机存储如0x12345678时,小端模式将最低有效字节(0x78)放在低地址,与大端相反。判断规则基于低地址存放的是高位数据(大端)还是低位数据(小端)。
2026-03-28 12:19:06
322
原创 linux下快捷删除单词、行的命令
注意: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。四、查看/修改当前绑定。
2025-09-05 20:53:36
1094
原创 谓词-普通函数 重载会带来歧义,需要指定类型以消除歧义&谓词+const
当 std::sort / std::find_if 检查可调用性时,库会尝试以 const Compare& 的形式去调用 operator(),结果找不到可用的 const 成员重载,从而报错。下面分项详细解释并给出修复示例(Detailed explanation + fixes)一、重载的普通函数名(overloaded free functions)为什么会报错。二、仿函数(functor)operator() 重载与 const 要求。你要我把你给出的代码修改并给出可直接编译的版本吗?
2025-08-24 17:50:42
658
原创 C++杂记
Translation Unit(翻译单元)是 C/C++ 编译过程中的一个基本概念。它指的是编译器实际编译的源代码单元一个源文件(通常是.c.cpp文件)该源文件中包含的所有头文件(通过#include指令展开后的内容)以及所有宏展开和预处理后的内容换句话说,一个源文件连同它所有直接或间接包含的头文件,经过预处理后形成的整体,就是一个翻译单元。术语说明翻译单元 (TU)预处理后,一个源文件及其包含的所有头文件组成的整体静态成员变量的定义必须放在某一个翻译单元中,进行实际内存分配。
2025-06-09 13:45:14
867
原创 C++教程part1_namespace & namespace的内存分配
1.namespace的用法;2.namespace可以全局展开--使用全局的using声明/编译指令;3.namespace的内存分配
2025-06-08 22:52:35
1214
原创 函数重载遇到引用时的问题
本文分析了C++中函数重载时引用参数的各种情况。当函数同时存在int和int&以及const int &版本时,调用func()会。。。
2025-06-02 13:42:35
191
原创 C 和 C++ 各个版本的变化及其对应的编译指令 (`-std=`)&gcc常见的一些编译指令&编译指令的使用时机/阶段
C 和 C++ 各个版本的变化及其对应的编译指令 (`-std=`)&gcc常见的一些编译指令&编译指令的使用时机/阶段
2025-05-30 09:30:38
616
原创 ${workspaceFolder},${fileDirname},${fileBasenameNoExtension} vscode中的launch.json以及task.json中的文件
VS Code的launch.json和tasks.json中常用的变量参数及其作用: ${workspaceFolder} ${workspaceFolderBasename} ${file} ${fileBasename} ...
2025-05-26 09:58:02
2279
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1