从 C 到 Modern C++:核心机制与技术复盘
C++ 并非仅仅是 C 语言带个类。从 Bjarne Stroustrup 在贝尔实验室的初心,到如今 C++23 的演进,这门语言一直在致力于解决大规模软件工程中的效率与安全问题。
以下是 C++ 核心入门机制的总结,它们如何填补 C 语言的'坑',并构建起现代工程基石。
1. 命名空间 (Namespace):拒绝'命名打架'
在写 C 语言项目时,最头疼的莫过于合并代码时发现两个库都有 Init 函数或者 data 变量,导致重定义错误。
C++ 引入了 namespace 来解决全局命名污染问题。它就像是给代码加了'围墙',把标识符关进不同的房间。
1. 正常的命名空间定义
- 定义命名空间,需要使用 namespace 关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。
- namespace 本质是定义出一个域,这个域跟全局域各自独立,不同的域可以定义同名变量,所以下面的 rand 不在冲突了。
- C++ 中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找一个变量/函数/类型出处 (声明或定义) 的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响编译查找逻辑,还会影响变量的生命周期,命名空间域和类域不影响变量生命周期。
- namespace 只能定义在全局,当然他还可以嵌套定义。
- 项目工程中多文件中定义的同名 namespace 会认为是一个 namespace,不会冲突。C++ 标准库都放在一个叫 std(standard) 的命名空间中。
namespace network { //网络模块
int Init(int a, int b) {
return a + b;
}
namespace HTTP { //子模块
int push(int a, int b) {
return a + b + 100;
}
}
}
namespace day { //文件模块
int Init(int a, int b) {
return (a + b) * 10;
}
}
int main {
(, network::(, ));
(, day::(, ));
(, network::HTTP::(, ));
;
}


