C++命名空间namespace怎么定义
今天小编给大家分享一下C++命名空间namespace怎么定义的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
一、命名空间的定义
定义命名空间,使用namespace关键字,后面跟命名空间的名字,然后接一对花括号{ } 即可,{ }中即为命名空间的成员。
1.一般定义
namespace test
{
int a = 10;
int b = 100;
int ADD(int x, int y)
{
return x + y;
}
}
2.嵌套定义
namespace test
{
int a = 10;
int b = 100;
int Add(int x, int y)
{
return x + y;
}
namespace test2
{
int c(99);
int d(9);
//c++可以使用括号来进行列表初始化
int Sub(int x, int y)
{
return x - y;
}
}
}
3.重名定义
同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
例如:
namespace N1 //N1是命名空间的名称
{
//用花括号{ }将命名空间的内容包起来
//命名空间的内容,即可以定义变量,也可以定义函数
int a;
int Add(int x, int y)
{
return x + y;
}
}
namespace N1 //再次定义命名空间 N1
{
int Mul(int x, int y)
{
return x * y;
}
}
实际上等同于:
namespace N1 //N1是命名空间的名称
{
//用花括号{ }将命名空间的内容包起来
//命名空间的内容,即可以定义变量,也可以定义函数
int a;
int Add(int x, int y)
{
return x + y;
}
int Mul(int x, int y)
{
return x * y;
}
}
二、命名空间的使用
C++为了防止命名冲突,把自己库里面的东西都定义在一个std的命名空间中要使用标准库里面的东西,有三种方式:
加命名空间的名称及作用域限定符。
使用using引入命名空间的成员。
使用using namespace 命名空间名称引入,将所有名称全展开。
1.命名空间的名称及作用域限定符
代码如下:
namespace test
{
int a = 10;
int b = 100;
int Add(int x, int y)
{
return x + y;
}
namespace test2
{
int c(99);
//c++可以使用括号来进行初始化
int d(9);
int Sub(int x, int y)
{
return x - y;
}
}
}
int main()
{
std::cout << test::Add(test::a, test::b) << std::endl;
std::cout << test::test2::Sub(test::test2::c, test::test2::d) << std::endl;
return 0;
}
指定命名空间–麻烦,每个地方都要指定,但也是最规范的方式。
2.使用using namespace 命名空间全展开
代码如下:
using namespace std;
把std整个展开,相当于库里面的东西全部到全局域里面去了,使用起来方便但是可能会有与自己命名空间定义的冲突,规范工程中不推荐这种,日常练习可以用这种。
3.使用using引入命名空间的成员
代码如下:
int c = 100;
namespace N
{
int a = 10;
int b = 20;
int Add(int left, int right)
{
return left + right;
}
int Sub(int left, int right)
{
return left - right;
}
}
using std::cout;
using std::endl;
int main()
{
printf("%d
", N::a);
printf("%d
", N::b);
printf("%d
", N::Add(1, 2));
printf("%d
", N::Sub(1, 2));
int c = 10;
printf("%d
", c); //局部变量优先,所以c为10
printf("%d
", ::c); //指定访问左边域,空白表示全局域
}
对部分常用的库里面的东西展开->针对1和2的折中方案,项目中也经常使用。
相关内容
这些是最新的
热门排行
- THINKPHP5+GatewayWorker+Workerman 开发在线客服系统
- 在手机浏览器网页中点击链接跳转到微信界面的方法
- 尊云网站目录系统 ThinkPHP5网站分类目录程序 v2.2.221011
- CentOS 7安装shadowsock(一键安装脚本)
- AdminTemplate 基于LayUI 2.4.5实现的网站后台管理模板
- 用NW.js(node-webkit)开发多平台的桌面客户端
- PHP生成随机昵称/用户名
- THINKPHP5网站分类目录程序 尊云网站目录系统
- 织梦(DEDECMS)微信支付接口 微信插件
- 基于LayUI开发的 网站后台管理模板 BeginnerAdmin
- 响应式后台网站模板 - AMA.ADMIN
- layuiAdmin后台管理模板 Iframe版
- LayUI 1.0.9 升级 至 LayUI 2.1.4 方法
- 简洁清爽的会员中心模板
- jQuery幸运大转盘抽奖活动代码