【c++基础】命名空间污染

为什么需要命名空间

命名空间本身就是为了解决在大型项目中,给函数和变量取名出现重复会导致代码冲突的问题。在命名空间出现之前的做法是数的做法是对每个模块的一组函数名加个特定前缀,这样的做法无疑给本来就有取名困难症的程序员们右加以一把火。
于是就有了命名空间这个东西, 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突。
比如说我们常用的std这个标准库的命名空间就是这样子来的。

命名空间污染

我们已经通过命名空间常识去解决了取名重复导致的代码冲突问题。但是为什么还会有命名空间污染呢。
其实主要是在于对

using namespace 

这个命令的滥用,会导致在代码中在不同命名空间的相同名字的变量或者函数导致代码冲突。
最重要的是千万不要在项目的头文件中使用这一命令。因为你不知道别人引用你这个头文件之后还有using什么命名空间,会导致难以查明具体原因。

如何去解决命名空间污染

  • 不要在头文件中使用using namespace
  • 如果引入了多个命名空间尽量使用了那个using声明具体的函数或者变量,例如:
using std::cin;
using std::cout;
using std::endl;
using cv::Mat;
  • 自己定义命名空间不要与其他命名空间同名
  • 在引入具有相同名字的变量或者函数时尽量使用命名空间::变量/函数的作用域的方式。
  • 并不是完全让你拒绝这个using namespace 好用的指令,而是让你更加清楚我应该在什么情况下可以使用该命令。
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VoladorL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值