开源录屏新标杆:Cap如何让屏幕录制变得简单优雅
2026/1/19 11:04:54
你可以把命名空间理解成代码的 “文件夹”—— 不同文件夹里可以有同名的文件,不会互相干扰;同理,不同命名空间里可以有同名的变量、函数、类,避免命名冲突(比如两个库都有叫print的函数)。
cpp
运行
#include <iostream> // 定义一个名为MySpace的命名空间 namespace MySpace { int num = 10; void show() { std::cout << "MySpace中的num:" << num << std::endl; } } // 定义另一个同名但嵌套/不同的命名空间(可拆分定义) namespace MySpace { // 可以在不同位置扩展同一个命名空间 int num2 = 20; } // 嵌套命名空间(C++17后支持简化写法) namespace Outer { namespace Inner { void func() { std::cout << "嵌套命名空间的函数" << std::endl; } } } // C++17简化写法:namespace Outer::Inner { ... }有 3 种常用方式,按需选择:
cpp
运行
int main() { // 方式1:直接指定命名空间(最推荐,清晰无歧义) MySpace::show(); std::cout << MySpace::num2 << std::endl; Outer::Inner::func(); // 方式2:using声明(只引入单个成员) using MySpace::num; std::cout << num << std::endl; // 直接用num,等价于MySpace::num // 方式3:using指令(引入整个命名空间,慎用!可能引发冲突) using namespace std; // 常用的std命名空间(cout/endl都在std里) cout << "直接用std的cout" << endl; return 0; }如果想让变量 / 函数只在当前.cpp 文件中生效,避免外部访问,可用匿名命名空间:
cpp
运行
namespace { int local_num = 100; // 仅当前文件可见,等价于static int local_num; } void test() { std::cout << local_num << std::endl; // 本文件内可直接用 }C++ 标准库的所有内容(如cout、string、vector)都在std命名空间中,这也是为什么你经常看到:
using namespace std;:懒人写法(新手常用,但大型项目不推荐)std::cout:规范写法(清晰、无冲突)Network::、UI::),避免模块间命名冲突。init()函数,用A::init()和B::init()区分。static。命名空间::成员的方式访问(清晰),避免全局using namespace std;(易冲突)。