C++命名空间 namespace详解

 更新时间:2023年04月03日 11:17:44   作者:Hongs_Cai  
定义命名空间,使用namespace关键字,后面跟命名空间的名字,然后接一对花括号{ } 即可,{ }中即为命名空间的成员,这篇文章主要介绍了C++命名空间 namespace,需要的朋友可以参考下

一、命名空间的定义

定义命名空间,使用namespace关键字,后面跟命名空间的名字,然后接一对花括号{ } 即可,{ }中即为命名空间的成员。

1.一般定义

namespace test
{
    int a = 10;
    int b = 100;
    int ADD(int x, int y)
    {
        return x + y;
    }
}

2.嵌套定义

namespace test
{
    int a = 10;
    int b = 100;
    int Add(int x, int y)
    {
        return x + y;
    }
    namespace test2
    {
        int c(99);
        int d(9);
		//c++可以使用括号来进行列表初始化
        int Sub(int x, int y)
        {
            return x - y;
        }
    }
}

3.重名定义

同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

例如:

namespace N1  //N1是命名空间的名称
{
	//用花括号{ }将命名空间的内容包起来
	//命名空间的内容,即可以定义变量,也可以定义函数
	int a;
	int Add(int x, int y)
	{
		return x + y;
	}
}
 
namespace N1  //再次定义命名空间 N1
{
	int Mul(int x, int y)
	{
		return x * y;
	}
}

实际上等同于:

namespace N1  //N1是命名空间的名称
{
    //用花括号{ }将命名空间的内容包起来
    //命名空间的内容,即可以定义变量,也可以定义函数
    int a;
    int Add(int x, int y)
    {
        return x + y;
    }
    int Mul(int x, int y)
    {
        return x * y;
    }
}

二、命名空间的使用

C++为了防止命名冲突,把自己库里面的东西都定义在一个std的命名空间中要使用标准库里面的东西,有三种方式:

  • 加命名空间的名称及作用域限定符。
  • 使用using引入命名空间的成员。
  • 使用using namespace 命名空间名称引入,将所有名称全展开。

1.命名空间的名称及作用域限定符

代码如下:

namespace test
{
	int a = 10;
	int b = 100;
	int Add(int x, int y)
	{
		return x + y;
	}
	namespace test2
	{
		int c(99);
		//c++可以使用括号来进行初始化
		int d(9);
		int Sub(int x, int y)
		{
			return x - y;
		}
	}
}
int main()
{
	std::cout << test::Add(test::a, test::b) << std::endl;
	std::cout << test::test2::Sub(test::test2::c, test::test2::d) << std::endl;
	return 0;
}

指定命名空间–麻烦,每个地方都要指定,但也是最规范的方式。

2.使用using namespace 命名空间全展开

代码如下:

using namespace std;

把std整个展开,相当于库里面的东西全部到全局域里面去了,使用起来方便但是可能会有与自己命名空间定义的冲突,规范工程中不推荐这种,日常练习可以用这种。

3.使用using引入命名空间的成员

代码如下:

int c = 100;
namespace N
{
	int a = 10;
	int b = 20;
	int Add(int left, int right)
	{
		return left + right;
	}
	int Sub(int left, int right)
	{
		return left - right;
	}
}
 
using std::cout;
using std::endl;
int main()
{
    printf("%d\n", N::a);
    printf("%d\n", N::b);
    printf("%d\n", N::Add(1, 2));
    printf("%d\n", N::Sub(1, 2));
    int c = 10;
    printf("%d\n", c);   //局部变量优先,所以c为10
    printf("%d\n", ::c); //指定访问左边域,空白表示全局域
}

对部分常用的库里面的东西展开->针对1和2的折中方案,项目中也经常使用。

到此这篇关于C++命名空间 namespace的文章就介绍到这了,更多相关命名空间 namespace内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言如何改变字体颜色

    C语言如何改变字体颜色

    这篇文章主要介绍了C语言如何改变字体颜色,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • C语言数组快速入门详细讲解

    C语言数组快速入门详细讲解

    数组是一组有序的数据的集合,数组中元素类型相同,由数组名和下标唯一地确定,数组中数据不仅数据类型相同,而且在计算机内存里连续存放,地址编号最低的存储单元存放数组的起始元素,地址编号最高的存储单元存放数组的最后一个元素
    2022-05-05
  • Python扩展C/C++库的方法(C转换为Python)

    Python扩展C/C++库的方法(C转换为Python)

    这篇文章主要介绍了Python扩展C/C++库的方法(C转换为Python),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • VC实现批量删除指定文件的方法

    VC实现批量删除指定文件的方法

    这篇文章主要介绍了VC实现批量删除指定文件的方法,是一个比较普遍且实用的功能,需要的朋友可以参考下
    2014-07-07
  • C++实现中值滤波的示例代码

    C++实现中值滤波的示例代码

    本文主要介绍了C++实现中值滤波的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • C语言实现超市信息管理系统课程设计

    C语言实现超市信息管理系统课程设计

    这篇文章主要为大家详细介绍了C语言实现超市信息管理系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 详解VS2019 dumpbin查看DLL的导出函数

    详解VS2019 dumpbin查看DLL的导出函数

    这篇文章主要介绍了详解VS2019 dumpbin查看DLL的导出函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • C++中cout的格式使用详细介绍

    C++中cout的格式使用详细介绍

    cout 是C++中 ostream 类型的对象,该类被封装在 < iostream > 库中,该库定义的名字都在命名空间 std 中,所以 cout 全称是 std::cout 。本文重点给大家介绍C++中cout的格式使用,需要的朋友参考下吧
    2021-06-06
  • C++内存分区模型超详细讲解

    C++内存分区模型超详细讲解

    在了解内存分区之前,我们先来聊一聊为什么要进行内存分区。在进行了内存分区之后,在不同的区域存放的数据,会有不同的生命周期,从而会让程序员的编程变得更加灵活
    2022-11-11
  • Flutter应用Windows平台接入实践详解

    Flutter应用Windows平台接入实践详解

    这篇文章主要为大家介绍了Flutter应用Windows平台接入实践详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02

最新评论