首页 > 编程语言 >C++中的命名空间

C++中的命名空间

时间:2024-11-12 19:18:26浏览次数:3  
标签:std namespace C++ 空间 命名 using 标识符

C++命名空间:

命名空间是一个声明性区域,为其内部的标识符(类型、函数和变量等的名称)提供一个范围。 命名空间用于将代码组织到逻辑组中,还可用于避免名称冲突,尤其是在基本代码包括多个库时。 命名空间范围内的所有标识符彼此可见,而没有任何限制。 命名空间之外的标识符可通过使用每个标识符的完全限定名(例如 std::vector)来访问成员,也可通过单个标识符的 using 声明 (using std::string) 或命名空间中所有标识符的 using 指令 (using namespace std;) 来访问成员。 头文件中的代码应始终使用完全限定的命名空间名称。

#include <iostream>
 using namespace std; // 定义命名空间 
 namespace A {
  int num = 25;
   void fun() {
    cout << "A" << endl; 
    } 
    } 
 namespace B { 
 int num = 30; 
 void fun() { 
 cout << "B" << endl;
  } 
  } 
  int main() {
   // 使用命名空间A中的变量和函数
    cout << A::num << endl; // 输出:25
     A::fun(); // 输出: A 
     // 使用命名空间B中的变量和函数
      cout << B::num << endl; // 输出:30 
      B::fun(); // 输出: B 
      return 0;
       }

命名空间的使用:

1.定义:

1)使用 namespace关键字来定义一个命空间

#include <iostream>
namespace MyNamespace {
    int p = 52;
    void fun() {
        std::cout << "Hello World!" << std::endl;
        
    }
}
int main(){
    //在定义命名空间后,可以通过作用域解析运算符 :: 来访问其中的符号
    std::cout<<MyNamespace::p;//输出52
    MyNamespace::fun();//输出:Hello World!
    return 0;
}

2)使用using声明

using namespace 声明会在整个作用域中引入命名空间中的所有符号,可能会导致名称冲突

#include <iostream>
using namespace MyNamespace;
 MyNamespace {
    int p = 52;
    void fun() {
        std::cout << "Hello World!" << std::endl;
    }
}
int main() {
    std::cout << p << std::endl; // 直接使用符号
    fun(); // 直接调用函数
    return 0;
}

命名空间主要有两个重要作用:

一是避免命名冲突。

在大型程序或多个代码库组合的场景中,不同的模块、库或者程序员可能会定义相同名称的变量、函数、类等。例如,一个数学库和一个图形库可能都有一个名为“normalize”的函数。通过将它们分别放在不同的命名空间(如“math”和“graphics”)中,就可以使用“math::normalize”和“graphics::normalize”来区分调用,从而避免冲突。

二是对代码进行逻辑分组。

可以将相关的类型、函数等组织在一起,使代码结构更清晰。比如,将所有和文件操作相关的函数放在一个名为“file_util”的命名空间下,将网络相关的放在“network_util”命名空间下,方便代码的维护和理解。

命名空间嵌套:

命名空间可以嵌套定义,以更好地组织代码:


namespace MyNamespace1 {
    namespace MyNamespace2 {
        void fun() {
            std::cout << "Hello World!" << std::endl;
        }
    }
}
int main() {
   MyNamespace1::MyNamespace2::fun(); // 访问嵌套命名空间中的函数
    return 0;
}

标签:std,namespace,C++,空间,命名,using,标识符
From: https://blog.csdn.net/2401_88249494/article/details/143721792

相关文章

  • 【c++】vector
    序列式容器vectorstd::vector 是STL提供的 内存连续的、可变长度 的数组(亦称列表)数据结构。能够提供线性复杂度的插入和删除,以及常数复杂度的随机访问。为什么要使用 vector作为OIer,对程序效率的追求远比对工程级别的稳定性要高得多,而 vector 由于其对内存的动态......
  • 【c++】运算详解
    运算算术运算符运算符功能+ (单目)正- (单目)负* (双目)乘法/除法%取模+ (双目)加法- (双目)减法单目与双目运算符单目运算符(又称一元运算符)指被操作对象只有一个的运算符,而双目运算符(又称二元运算符)的被操作对象有两个。例如 1+2 中加号就是双目运算符,它有 1 和 2 两......
  • 【c++】枚举详解
    简介枚举(英语:Enumerate)是基于已有知识来猜测答案的一种问题求解策略。枚举的思想是不断地猜测,从可能的集合中一一尝试,然后再判断题目的条件是否成立。要点给出解空间建立简洁的数学模型。枚举的时候要想清楚:可能的情况是什么?要枚举哪些要素?减少枚举的空间枚举的范围是......
  • 【c++】结构体和类详解
    结构体结构体(struct),可以看做是一系列称为成员元素的组合体。可以看做是自定义的数据类型。Note本页描述的 struct 不同于C中 struct,在C++中 struct 被扩展为类似 class 的类说明符。定义结构体structObject{intweight;intvalue;}e[array_length];......
  • 在通讯领域,特别是在自由空间光通信(Free Space Optics, FSO)通道模拟中,选择合适的模型需
    在通讯领域,特别是在自由空间光通信(FreeSpaceOptics,FSO)通道模拟中,选择合适的模型需要考虑模型对动态变化的光信号传播环境的适应性和预测能力。根据搜索结果,以下是一些可能适合通讯领域FSO通道模拟的模型:TACTiS-2:这是一个灵活的多变量概率时间序列预测模型,它简化了attenti......
  • C++笔记---智能指针
    1.什么是智能指针1.1 RALL设计思想RAII(ResourceAcquisitionIsInitialization,资源获取即初始化)是一种资源管理类的设计思想,广泛应用于C++等支持对象导向编程的语言中。它的核心思想是将资源的管理与对象的生命周期紧密绑定,通过在对象的构造函数中获取资源,并在析构函数中......
  • PowerShell 重命名文件夹及删除空文件夹
    数据来源$urldata中的倒数第2列(子文件夹名称列)包含/、\等特殊字符某个文件夹重命名脚本foreach($iin0..100){#提取路径部分$basePath=($urldata[$i].split("`t")[-1]).trim()$subPath=($urldata[$i].split("`t")[-2].replace('"','')......
  • 打卡信奥刷题(222)用C++信奥P1746[普及组/提高] 离开中山路
    离开中山路题目背景《爱与愁的故事第三弹·shopping》最终章。题目描述爱与愁大神买完东西后,打算坐车离开中山路。现在爱与愁大神在x1,......
  • C++语法·三
    内联函数(inline)简介:用inline修饰的函数叫内联函数,编译时C++编译器会在调用的地方站开内联函数,这样调用函数就不需要创建栈帧了,可以提高效率。内联函数与宏函数:C++中的内联函数与C中的宏函数很相似,都是直接在预处理时展开函数,将函数直接替换到调用位置,不额外创建栈帧。但内联......
  • 【C++】详细介绍模版进阶,细节满满
    目录一、非类型模版参数:1、介绍:2、使用:3、注意:4、应用二、模版特化(一)、概念(二)、函数模版特化1、步骤:2、举例:3、不建议使用函数模版特化(三)、类模版特化1.全特化:2、偏特化2.1、部分特化2.2、参数更进一步的限制2.3、注意:2.4、普通指针变量传递给const指针变量......