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

C++ 核心基础概念详解

C++ 基础涵盖命名空间解决冲突、输入输出流操作、缺省参数规则、函数重载机制、引用别名特性及 const 引用安全、宏与内联函数区别以及 nullptr 空指针安全性。重点在于理解作用域查找、内存操作效率提升及类型安全规范。

鲜活发布于 2026/3/30更新于 2026/10/878 浏览
C++ 核心基础概念详解

C++ 兼容 C 语言,这意味着我们可以在 C++ 环境下编写 C 代码。了解其基础概念对于掌握这门语言至关重要。

一、命名空间

在 C++ 中,标识符(变量、函数、类等)的查找遵循作用域规则:编译器从当前最内层作用域开始查找,找到即止。如果同一作用域下存在同名标识符,就会引发冲突。

1. 解决冲突

例如,stdlib.h 中有 rand 函数。如果在局部定义 int rand = 10;,由于局部优先,代码能执行;但如果是全局定义,则与库函数冲突导致编译报错。

命名空间就是为解决此类冲突设计的'自定义域'。

语法:

namespace 命名空间名 {
    // 自定义标识符
}

访问时使用 命名空间名::标识符。

2. 嵌套与使用

命名空间可以嵌套,形成层级结构。若需简化调用,可使用 using 关键字。

  • 指定成员: using 命名空间名::成员;
  • 全部展开: using namespace 命名空间名;

注意:同一个命名空间可以分散在不同文件中,编译器会自动合并它们。标准库中的所有内容都位于 std 命名空间中。

二、输入输出

C++ 使用 <iostream> 头文件提供流式 I/O 功能。

  • cin/cout: 分别代表控制台输入和输出。由于它们在 std 命名空间中,使用时需加前缀或引入命名空间。
  • 运算符: << 是流插入运算符,>> 是流提取运算符。它们支持链式操作,可一次处理多个内容。
  • endl: 表示换行并刷新缓冲区。

示例:

#include<iostream>
using namespace std;
int main() {
    int a, b;
    cout << "请输入两个整数:";
    cin >> a >> b;
    cout << "两数之和为:" << a + b << endl;
}

C++ 能自动识别变量类型,无需像 C 那样手动指定占位符。

三、缺省参数

函数定义时可为参数指定默认值。调用时若不传参则使用默认值。

  • 全缺省: 所有参数都有默认值。
  • 半缺省: 部分参数有默认值。规定必须从右向左连续设置,且调用时必须先传完非缺省参数。

注意: 声明和定义分离时,缺省值只能出现在声明中。

四、函数重载

同一作用域内允许存在同名函数,前提是参数列表不同(个数、类型或顺序)。这提高了代码的可读性和复用性。

int Add(int a, int b) { return a + b; }
double Add(double x, double y) { return x + y; }

五、引用

引用是已有变量的别名,直接操作原内存地址,常用于函数传参以减少拷贝开销。

1. 基本特性

  • 初始化: 定义时必须绑定对象。
  • 不可变: 引用一旦绑定,不能更改指向其他对象。
  • 多引用: 一个变量可有多个引用,修改任一引用都会影响原变量。

2. Swap 对比

指针方式需要解引用,引用方式更直观。

void Swap(int& a, int& b) {
    int tmp = a;
    a = b;
    b = tmp;
}

3. const 引用

用于修饰临时变量或常量,防止意外修改。普通引用不能绑定临时变量,因为临时变量生命周期短且不安全,而 const 引用延长了其生命周期并限制了权限。

4. 引用 vs 指针

特性引用指针
空间不单独占用空间占用内存存储地址
初始化必须初始化建议初始化
绑定不可改绑可重新赋值
安全性无空指针风险可能为空或野指针

六、宏与内联函数

1. 宏 (Macro)

预处理阶段的文本替换。分为有参和无参宏。需注意运算符优先级,通常给参数加括号。

2. 内联函数 (Inline)

被 inline 修饰的函数,编译器尝试在调用处展开代码,避免栈帧创建开销。它本质仍是函数,支持调试,且由编译器决定是否采纳。

区别: 宏是文本替换,无法调试;内联函数是函数,更安全。

七、nullptr

C++11 引入了 nullptr 关键字表示空指针。相比 NULL(通常为 0),nullptr 具有明确的指针类型,能避免函数重载时的歧义。

void Print(int* x) { /* ... */ }
void Print(int x) { /* ... */ }
Print(nullptr); // 明确调用指针版本
Print(NULL);     // 可能误判为 int 版本

目录

  1. 一、命名空间
  2. 1. 解决冲突
  3. 2. 嵌套与使用
  4. 二、输入输出
  5. 三、缺省参数
  6. 四、函数重载
  7. 五、引用
  8. 1. 基本特性
  9. 2. Swap 对比
  10. 3. const 引用
  11. 4. 引用 vs 指针
  12. 六、宏与内联函数
  13. 1. 宏 (Macro)
  14. 2. 内联函数 (Inline)
  15. 七、nullptr

更多推荐文章

查看全部
  • Vue3.x+TypeScript 实践指南:技术体系与实战项目
  • 基于 FPGA 的高精度 TDC 设计
  • MCP 插件配置实战:browser-tools-mcp 集成指南
  • Stack-Chan 机器人开发入门:基于 M5Stack 的 JavaScript 实现
  • OpenClaw 配置指南:定制专属 AI 助手
  • FPGA 比特流 (Bitstream) 深度解析
  • Kali Linux 2025 部署与 OpenVAS 安装使用指南
  • Java Map 与 Set 数据结构及实现原理
  • Rust 实现链表两数相加算法详解
  • C++ IO 流与类型转换核心解析
  • Ubuntu NAT 模式下配置静态 IP 地址的方法
  • BERT 模型详解:架构、原理与实战
  • Python 入门教程:从基础语法到控制流
  • Whisper 模型版本及下载链接
  • Qwen3Guard-Gen-WEB 审核规则定制与策略引擎部署实战
  • 从零构建大模型:核心原理与实战指南
  • 使用 Python 将 CSV 数据导入 Neo4j 图数据库
  • Python 多线程编程基础
  • 大模型情绪价值实战指南:打造专属 AI 情绪陪伴助手
  • 学生如何申请和使用 GitHub Copilot

相关免费在线工具

  • 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