跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++

C++ 核心知识点解析

系统梳理了 C++ 核心知识点,涵盖 extern 声明与链接规范、static/inline/const 的作用域与优化机制、友元关系、构造函数种类及移动语义、函数对象重载、多重继承中的菱形问题解决方案、虚函数多态原理以及 new 与 malloc 的内存分配差异对比。内容旨在帮助开发者深入理解 C++ 底层机制与最佳实践。

板砖工程师发布于 2026/3/30更新于 2026/9/1160 浏览

1. extern 声明与 extern "C"

  • extern 声明:仅声明变量或函数而不分配内存,通常用于头文件中共享全局变量或函数声明。
  • extern "C":强制以 C 语言方式编译函数,避免 C++ 的名称修饰(name mangling)。常用于 C/C++ 混合编程。
#ifdef __cplusplus
extern "C" {
void c_style_function();
}
#endif

2. static、inline 与 const

  • 限制作用域为当前源文件(文件作用域)。
  • 静态成员变量需在类外定义,静态成员函数不能访问非静态成员。
  • 建议编译器内联展开函数体,适用于短小且频繁调用的函数。
  • 只能被常量对象调用,且不能修改成员变量(除非变量标记为 mutable)。

const 成员函数:

class ConstExample {
    mutable int modifiable;
public:
    void const_func() const {
        modifiable = 1;
    }
};

inline:

inline int add(int a, int b) {
    return a + b;
}

static:

class Example {
public:
    static int count;
    static void  {  }
};
 Example::count = ;
print
()
/* 仅访问静态成员 */
int
0

3. 友元函数与友元类

  • 友元函数/类可访问目标类的私有成员,但友元类不反向共享权限。
class FriendTarget {
private:
    int secret;
    friend class FriendClass;
    friend void friend_func();
};

4. 构造函数类型

  1. 默认构造函数:无参数。
  2. explicit 构造函数:禁止隐式转换。
    explicit String(int size);
    
  3. 委托构造函数:通过初始化列表调用其他构造函数。
    Example() : Example(0) {}
    
  4. 移动构造函数:接管右值资源,标记为 noexcept。
    String(String&& other) noexcept : data(other.data) {
        other.data = nullptr;
    }
    
  5. 拷贝构造函数:复制对象状态。
    String(const String& other);
    

5. 移动语义与完美转发

完美转发:std::forward 保持参数原始值类别(左值/右值)。

template<typename T>
void wrapper(T&& arg) {
    target(std::forward<T>(arg));
}

移动语义:std::move 将左值转为右值,避免拷贝开销。

std::vector<int> v1 = std::move(v2);

6. 函数对象(仿函数)

重载 operator() 使对象可调用:

struct Adder {
    int operator()(int a, int b) {
        return a + b;
    }
};
Adder add;
add(1, 2);

7. 多重继承与菱形继承

  • 菱形继承问题:派生类间接继承基类多次。
  • 虚继承:通过 virtual 关键字解决重复继承。
class A {};
class B : virtual public A {};
class C : virtual public A {};
class D : public B, public C {};

8. 虚函数

纯虚函数:定义接口,强制子类实现。

class Abstract {
public:
    virtual void pure() = 0;
};

虚函数:运行时动态绑定,需通过指针/引用调用。

class Base {
public:
    virtual void show() {
        std::cout << "Base";
    }
};
class Derived : public Base {
    void show() override {
        std::cout << "Derived";
    }
};
Base* obj = new Derived();
obj->show();

9. new 与 malloc 对比

特性new (C++)malloc (C)
内存分配调用构造函数仅分配内存
返回类型类型指针(T*)void*
失败处理抛出 bad_alloc 异常返回 nullptr
示例int* p = new int(10);int* p = (int*)malloc(sizeof(int));

目录

  1. 1. extern 声明与 extern "C"
  2. 2. static、inline 与 const
  3. 3. 友元函数与友元类
  4. 4. 构造函数类型
  5. 5. 移动语义与完美转发
  6. 6. 函数对象(仿函数)
  7. 7. 多重继承与菱形继承
  8. 8. 虚函数
  9. 9. new 与 malloc 对比

更多推荐文章

查看全部
  • Fooocus 部署实战:本地配置与云端快速启动
  • SonarQube 跳过指定代码检查方法
  • 基于 Gradio 扩展 Youtu-VL-4B-Instruct WebUI 实现图片批处理
  • OpenClaw 多机器人多 Agent 模式:打造你的 AI 助手团队
  • Python 实现 PDF 表单域的自动化创建与智能填充
  • Java 9 至 Java 25 语言演进与核心技术革新解析
  • LeetCode 四数之和:Python 排序 + 双指针解法
  • Stack-Chan 机器人入门与开发实战
  • 开源大模型深度评测:四大免费模型场景化对比与选型指南
  • Knife4j 4.5.0 与 Spring Boot 3.x 版本兼容问题解决方案
  • SM2 国密算法原理与 C++跨平台实现
  • Windows 下 Git Bash 安装与基础配置指南
  • 零基础搭建 FPGA 下载环境:USB-Blaster 驱动安装
  • 深度学习模型优化策略与实战调参
  • 腾讯云轻量应用服务器部署 OpenClaw 并接入 QQ 与飞书机器人
  • 13 款常用 Linux 运维监控与管理工具推荐
  • 前端地图 SDK 接入与统一封装
  • web-print-pdf:基于 Playwright 的 Web 打印解决方案
  • AI Agent 实战:从零搭建生产级框架与核心实现
  • Hugging Face:不仅是 AI 的 GitHub,更是开发者的开源生态家园

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online