C++ namespace 命名空间

本文深入探讨了C++中命名空间(namespace)的概念及其作用,解释了如何通过命名空间避免命名冲突,尤其是在大型项目中。文章提供了加载标识符、使用无名命名空间以及不支持namespace时的替代方案,并附有实例代码。

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

namespace 的作用

namespace用于分割项目整个空间,使每一个空间相对独立,虽然相同的名字存在,但是他们处于不同的namespace中,就不会发生命名冲突。

全局作用域最大的问题是只有一个。在一个大型项目中,人们经常会重复命名从而导致命名冲突。
例子:
library1.h might define a number of constants, including the following:

const double LIB_VERSION = 1.204;

Ditto for library2.h:

const int LIB_VERSION = 3;

使用方法

  1. 加载所有标识符
#include
#include
using namespace std;
  1. 仅加载一个标识符
using std::cout;
  1. 直接指定标识符
std::cout << 10 << std::endl;

无名命名空间

无名命名空间定义是具有下列形式的命名空间定义

inline(可选) namespace attr(可选) { 命名空间体 }		

例子:

namespace Test //(attr optional)
{
	int a;
	void f(){/*...*/}
}

以上例子等价于

namespace Test //(attr optional)
{
	int a;
	void f(){/*...*/}
}
using namespace Test;

使用无名命名空间的好处是外部环境将无法说出无名命名空间的成员名字,即不让外界知道我的内部成员及调用。及如果attr没有定义则外部环境无法知道命名空间的名字。

如果不支持namespace,可以使用struct来模仿

struct lib {
	const double LIB_VERSION;
};
const double lib::LIB_VERSION = 2.0;

人们可以通过struct name调用

void f()
	cout << lib::LIB_VERSION;
}

参考资料:

  1. Effective C++ 2nd edition
  2. https://blog.youkuaiyun.com/y396397735/article/details/47835341
  3. https://blog.youkuaiyun.com/Bruce_0712/article/details/53644809
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值