C++ 命名空间(Namespace)

1 概述

  在C++中,命名空间(Namespace)是一种将标识符组织在一起的方式,用于防止名字冲突。它可以防止全局命名的冲突,让你的代码更容易维护,也可以帮助控制程序的可见性,避免在全局命名空间中引入不必要的名字。

2 用法

以下是一些C++命名空间的使用方法:

2.1 创建命名空间

cpp 复制代码
namespace product_name {
    int x = 10;
    int y = 20;
    void func() {
        // do something
    }
}

2.2 使用命名空间中的变量或函数

cpp 复制代码
int main() {
    // 使用命名空间中的变量
    std::cout << product_name::x << std::endl;
 
    // 使用命名空间中的函数
    product_name::func();
 
    return 0;
}

2.3 使用using声明来简化命名空间中的名字

cpp 复制代码
using namespace product_name;
int main() {
    // 直接使用命名空间中的名字,无需再添加命名空间前缀
    std::cout << x << std::endl;
    func();
 
    return 0;
}

2.4 使用using指令来引入特定的名字

cpp 复制代码
using product_name::x;
using product_name::func;
 
int main() {
    // 只引入了命名空间中的特定名字
    std::cout << x << std::endl;
    //命名空间中y还是需要命名空间
    std::cout << product_name::y << std::endl;

    func();
 
    return 0;
}

2.5 嵌套命名空间

cpp 复制代码
namespace company_name {
    int x = 10;
    int y = 20;
    namespace project_name {
        void func() {
            // do something
        }
    }
}

在嵌套命名空间中,要访问内层命名空间中的名字,需要使用完整的路径,例如 company_name::project_name::func();。

2.6 命名空间别名

cpp 复制代码
namespace pn = product_name;

int main() {
    // 使用别名来简化代码
    std::cout << pn::x << std::endl;
    ns::func();
 
    return 0;
}

2.7 匿名命名空间

cpp 复制代码
namespace  {
    int x = 10;
    int y = 20;
    void fun(){

    }
}

void test()
{
    std::cout << x << std::endl;
    std::cout << y << std::endl;
    fun();
}

匿名命名空间中变量或函数只能在文件作用域内部使用,其它文件无法使用,等同于static修改变量和函数。

如下所示:

cpp 复制代码
static int x = 10;
static int y = 20;
static void fun(){
}

void test()
{
    std::cout << x << std::endl;
    std::cout << y << std::endl;
    fun();
}

3 总结

  命名空间提供了一种管理复杂项目和代码模块化的方法,是C++中重要的组成部分。

相关推荐
土司大王27 分钟前
LeetCode hot100——对称二叉树
算法·leetcode·职场和发展
sali-tec1 小时前
C# 基于OpenCv的视觉工作流-章106-差值追踪
图像处理·人工智能·opencv·算法·计算机视觉
Navigator_Z1 小时前
LeetCode //C - 1208. Get Equal Substrings Within Budget
c语言·算法·leetcode
手写码匠1 小时前
Dify 多 Agent 工具权限与安全沙箱实战:让智能体“有能力,但不越权“
人工智能·深度学习·算法·aigc
黎阳之光1 小时前
打破堆场感知黑盒:黎阳之光视频孪生,构建港口码头网格化透明管控新体系
大数据·人工智能·算法·安全·数字孪生
大模型码小白2 小时前
AI 对话流性能调优:万级消息的虚拟滚动落地
java·大数据·前端·javascript·人工智能·算法·机器学习
m0_547486662 小时前
《JavaScript核心原理 》全套PPT课件2026
开发语言·javascript·ecmascript
老当益壮梁奶奶2 小时前
Linux软件编程学习笔记(七):线程分离与线程间通信详解
linux·c语言·c++·笔记·学习
MC皮蛋侠客2 小时前
Tauri 2.x 系列(五):调用系统 API——官方插件、Rust crate 与原生能力
开发语言·后端·rust
sel_93 小时前
【多轮对话论文导读(三)】多轮对话与Agent论文阅读笔记:用户模拟、轨迹生成与长期记忆
论文阅读·人工智能·笔记·深度学习·算法·机器学习