namespace的命名空间变量使用

本文讨论了如何利用C++的namespace命名空间解决项目中出现的名称冲突问题。通过示例说明了当namespace内的变量与全局变量同名时,如何通过明确指定命名空间或使用using声明来消除二义性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用namespace命名空间可以避免很多厂商自己造的轮子与其他厂商的产生命名冲突,所以,可以将自己写的一些函数包装在namespace中,既可以放心的使用自家造的轮子,也避免命名冲突 。

项目场景:

使用namespace的命名空间变量解决名称冲突问题

问题描述:

fill中的val 和 全局变量val产生二义性

#include<iostream>
using namespace std;
#include<string>
namespace fill
{
	int val = 20;
}
int val = 10;
int main()
{
	using namespace fill;
	cout << "val = " << val << endl;   //fill中的val 和 全局变量val产生二义性
	system("pause");
}

原因分析:

使用了namespace之后表示可以不用再加命名空间限定自己定义的变量或者函数了,但是此时有同名变量或者函数时就导致编译器无法知道使用者的意图。

解决方案:

1.在调用相同名称的变量或者函数时,在前面加上名称空间
和解析运算符::

#include<iostream>
using namespace std;
#include<string>
namespace fill
{
	int val = 20;
	string str = "fill";
	void test_01() { cout << "fill test_01()" << endl; }
}
namespace fill2
{
	string str = "fill2";
}
void test01()
{
	cout << "fill str = " << fill::str << endl;
	cout << "fill2 str = " << fill2::str << endl;
}
int main()
{
	test01();
}

输出结果:
在这里插入图片描述
2.其中 拿一个举例,
如果加上 using fill::val ,那么此时全局的val就只能用::val表示,命名空间中的可以直接使用val或者用命名空间限定。
如果不加 using fill::val ,那么此时全局的val 就可以用val和::val表示,此时val就只能用命名空间限定来访问。

#include<iostream>
using namespace std;
#include<string>
namespace fill
{
	int val = 20;
	string str = "fill";
	void test_01() 
	{ 
	cout << "fill test_01()" << endl; 		  
   }
}

void test_01()
{
	cout << "globle test_01()" << endl; 
}

int val = 10;
int main()
{
	//using namespace fill;    //如果加入这个就会导致直
	                           //接使用val会造成二义性
	using fill::val;
	using fill::test_01;
	::test_01();
	test_01();
	cout << "val = " << ::val << endl;
	cout << "val = " << val << endl;
	system("pause");
}

运行结果图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值