文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++命名空间namespace详解

2023-05-14 08:12

关注

一、命名空间的定义

定义命名空间,使用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的命名空间中要使用标准库里面的东西,有三种方式:

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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯