C++:using关键字详解

C++:using关键字详解

一、using声明

1、命名空间中变量调用方式:

#include <iostream>
using namespace std;

namespace A // 声明命名空间A
{
	int paramx = 20;
	int paramy = 30;
	void fun01()
	{
		cout<<"Hello func01"<<endl;
	}
	void fun02()
	{
		cout<<"Hello func02"<<endl;
	}
}

// 命名空间中变量调用方式
void test01()
{
	// 1、通过命名空间域运算符(::)
	cout<<"A::paramx = "<<A::paramx<<endl;
	A::fun01();
	
	// 2、using声明
	using A::paramy;
	using A::fun02;
	cout<<"A::paramy = "<<paramy<<endl;
	// cout<<"A::paramx = "<<paramx<<endl; // paramx未用using声明,不可直接访问。

	// 3、同名冲突
	// int paramy = 100; // 相同作用域注意同名冲突。
}

int main()
{
    test01();
    return 0;
}

2、using声明遇到函数重载:若命名空间包含一组用相同名字重载的函数,using声明就声明了这个重载函数的所有集合。

#include <iostream>
using namespace std;

namespace B
{
	void func()
	{
	}
	void func(int x)
	{
	}
	int func(int x, int y)
	{
		return x + y;
	}
}

int main()
{
	using B::func;
	func();
	func(10);
	cout<<func(10, 20)<<endl;
    return 0;
}

二、using编译指令 - using编译指令使整个命名空间标识符可用。

注意:使用using声明和using编译指令会增加命名冲突的可能性。即,若存在命名空间, 在代码中使用作用域解析运算符(::),可避免二义性。

namespace C
{
	int paramx = 20;
	int paramy = 30;
	void fun01()
	{
		cout<<"Hello func01"<<endl;
	}
	void fun02()
	{
		cout<<"Hello func02"<<endl;
	}
}

namespace D
{
	int paramx = 20;
	int paramy = 30;
	void fun01()
	{
		cout<<"Hello func01"<<endl;
	}
	void fun02()
	{
		cout<<"Hello func02"<<endl;
	}
}

void test03()
{
	using namespace C;
	cout<<"C::paramx = "<<paramx<<endl;
	cout<<"C::paramy = "<<paramy<<endl;
	fun01();
	fun02();
	
	// 不会产生二义性
	int paramx = 100;
	cout<<"C::paramx = "<<paramx<<endl;
}


void test04()
{
	using namespace C;
	using namespace D;
	// 二义性产生,不知道调用C中paramx还是D中paramx。
	//cout<<"paramx = "<<paramx<<endl;
}

void test05()
{
	int* param = &(C::paramx);
	*param = 1000;
	cout<<"param = "<<*param<<endl;
}

int main()
{
	test03();
	test04();
	test05();
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值