C++基础之命名空间(一)

本文详细解释了命名空间在C++中的概念,包括其作用、不同类型的内容可以放入、使用形式(using指令、作用域限定符、using声明)、命名空间的扩展以及匿名空间的特点。
摘要由CSDN通过智能技术生成

C++为解决相同的函数名或变量名造成冲突使用了命名空间这一概念:

那什么是命名空间呢?命名空间又称为名字空间,是程序员命名的内存区域,程序员根据需要指定一些有名字的空间域,把一些全局实体分别存放到各个命名空间中,从而与其他全局实体分隔开。通俗的说就是,每一个名字空间都是一个独立的空间域,只要你不取使用这个空间域的话,程序是找不到这块空间内的内容的。我们把命名空间的内容叫做实体

一个命名空间可以放哪些类型?
变量
常量
函数,可以是定义或声明
结构体

模板
命名空间,可以嵌套定义

一.命名空间的使用形式:

1.using编译指令

#include<iostream>
//其中std是标准命名空间
using namespace std;
int main()
{
	cout << "hello,world" << endl;
	return 0;
}

此方法可以一次性将标准命名空间std内的所有实体都暴露出来,如果对一个空间内的实体不熟悉,会造成名字冲突的问题。

2.作用域限定符的形式

#include<iostream>
int main()
{
	std::cout << "hello,world" << std::endl;
	return 0;
}

通过作用域限定符::指出是哪个命名空间的哪个实体,优点是即使自定义的实体与命名空间的实体冲突了也没有关系;缺点是使用起来太复杂。

3.using声明机制

#include<iostream>
using std::cout;
using std::endl;
int main()
{
	cout << "hello,world" << endl;
	return 0;
}

通过using使用哪个实体就引出哪个实体,不会造成命名冲突。

二.命名空间的扩展

#include<iostream>
using std::cout;
using std::endl;

namespace myspace {
	int number = 100;

	void print_1()
	{
		cout << "hello" << endl;
	}

}

namespace myspace {
	void print_2()
	{
		cout << "world" << endl;
	}
}
int main()
{
	
	myspace::print_1();
	myspace::print_2();
	return 0;
}

重复定义命名空间相当于对命名空间进行一次扩展。

三.匿名空间

#include<iostream>
using std::cout;
using std::endl;
int number = 10;

namespace myspace {
	int number = 100;

	void print(int number)
	{
		cout << "函数参数number=" << number << endl;
		cout << "myspace命名空间的number=" << myspace::number << endl;
		cout << "匿名空间的number=" << ::number << endl;
	}

}
int main()
{
	myspace::print(50);
	return 0;
}

即使你不定义任何一个空间,所写函数和变量等实体默认也是在一个匿名空间中,由于没有名字,该空间中的实体,其它文件无法引用,它只能在本文件的作用域内有效,它的作用域是从匿名命名空间声明开始到本文件结束。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值