恭喜你发现了一位萌新的新博客~如有不足还请补充,欢迎大佬们点评!
🐱💻博客主页:月赋闲
🌹🌹希望大家多多点赞给点关注,顺着关注回访!!!🌹🌹
引言
在c语言中,我们经常会遇到自定义命名与库函数命名冲突的问题,那么作为c语言“进化版”的c++,自然会解决这一问题。那么c++的解决方式呢,便是用命名空间来解决。
一、命名空间定义
在c++中,定义一个命名空间需要用到“namespace”关键字,后面紧跟空间名字,再用“{}”包裹成员就好了。
namespace my_space { int rand = 10; int Add(int left, int right) { return left + right; } struct Node { struct Node* next; int val; }; }
my_space就是这个空间的名字
命名空间里可以定义变量、函数、类型等
命名空间也可以像函数一样进行嵌套使用
namespace T1 { int a; int b; int Add(int left, int right) { return left + right; } namespace T2 { int c; int d; int Sub(int left, int right) { return left - right; } } }
同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。 ps:一个工程中的test.h和上面test.cpp中两个N1会被合并成一个
// test.h namespace N1 { int Mul(int left, int right) { return left * right; } }
注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中
二、命名空间的使用
前面讲完了命名空间如何进行定义,那么我们又该如何使用命名空间里的成员呢?
我们先来看看下面这段代码的运行
namespace my_space { int rand = 10; int Add(int left, int right) { return left + right; } struct Node { struct Node* next; int val; }; } int main() { cout << rand << endl; return 0; }
我们可以看到,明明在命名空间中给rand赋值为10,但为什么输出的是一串地址呢?
这其实是因为我们根本没有调用命名空间里的rand而是调用了库里的rand。
在c++中,我们有三种使用命名空间的方式
- 加命名空间名称及作用域限定符
int main() { cout<<N::a<<endl; return 0; }
- 使用using将命名空间中某个成员引入
using N::b; int main() { cout<<N::a<<endl; cout<<b<<endl; return 0; }
- 使用using namespace 命名空间名称引入
using namespce N; int main() { cout<<N::a<<endl; cout<<b<<endl; Add(10, 20); return 0; }
尾言
以上便是本篇博客的内容,希望能够帮助到大家。