目录
定义
namespace 免费精选名字大全空间的免费精选名字大全{ 全局变量 类型定义 函数 }
意义
对于一个较大型的c++程序来说,需要由多个程序员相互协作编写,这样的情况下容易出现不同程序员在需要负责的程序部分使用相同免费精选名字大全的变量或函数,导致程序合并后出现问题。免费精选名字大全空间的作用,就是将不同程序员编译的程序放入相应的免费精选名字大全空间,每个免费精选名字大全空间相对独立,空间内的变量和函数名只局限于当前空间下,从而解决命名冲突的问题。
免费精选名字大全空间的三种使用方法
(1)作用域限定符 免费精选名字大全空间名::标识符 表示明确访问是特定免费精选名字大全空间中的特定标识符 最麻烦 (2)免费精选名字大全空间指令 using namespace 免费精选名字大全空间名; 该语句可以在任何地方 表示在该指令之后,对指令所指的免费精选名字大全空间中所有标识符对当前作用域都可见 接下来都可以直接访问免费精选名字大全空间中的标识符,不需要加"免费精选名字大全空间名::" 当然也可以加 *对当前作用域可见 (3)免费精选名字大全空间声明 using 免费精选名字大全空间::标识符 将指定免费精选名字大全空间中的某个标识符(成员)引入到当前作用域,可以直接访问 *导入到当前作用域
#include <iostream> using namespace std; //定义免费精选名字大全空间 namespace wd1{ int g = 1024; void func(void){ cout << "func" << endl; } struct stu{ int no; char name[40]; }; } int main(){ using wd1::g; cout << g << endl; cout << wd1::g << endl; wd1::func(); struct wd1::stu s = {}; using namespace wd1; cout << g << endl; func(); struct stu s2 = {}; return 0; } /*using wd1::g; cout << g << endl; 和 cout << wd1::g << endl; 就只是其中的两种定义方法,两个是等价的*/
匿名空间
编译器为没有指明免费精选名字大全空间的全局区的标识符置于匿名免费精选名字大全空间中 如果要指明访问匿名免费精选名字大全空间中的标识符 直接用 ::标识符 匿名的命名空间是c++的特性,相对于c的static声明来说, 可以在匿名的空间里面声明很多 变量和函数,这样可以省去了对每个变量和函数添加static声明. 实质上匿名空间的功能跟static声明是一样的
#include <iostream> using namespace std; //如果一个全局的标识符没有指定免费精选名字大全空间,编译器将会为其缺省地置于匿名免费精选名字大全空间中 int gv = 1024; int main(){ cout << gv << endl; cout << ::gv << endl; //访问指定免费精选名字大全(匿名免费精选名字大全)空间中的标识符 int gv = 9527; cout << gv << endl;//访问局部的 局部优先原则 同名的局部变量会隐藏同名的全局变量 cout << ::gv << endl;//访问全局的 return 0; }
免费精选名字大全空间合并
一个程序中,如果免费精选名字大全空间免费精选名字大全相同,则认为是同一个免费精选名字大全空间 里面的标识符会进行合并
#include <iostream> using namespace std; namespace myspace{ int x = 1024; void func(){ cout << "func" << endl; } } namespace myspace{ int y = 9527; void bar(){ cout << "bar" << endl; } } int main(){ using namespace myspace; cout << x << endl; cout << y << endl; func(); bar(); return 0; }
免费精选名字大全空间嵌套
一个免费精选名字大全空间包含另外一个免费精选名字大全空间 不能直接 using namespace 里层免费精选名字大全空间; 对于当前作用域而言是不可见
#include <iostream> using namespace std; //int x = 1; namespace s1{ int x = 1024; namespace s2{ int y = 9527; namespace s3{ int z = 1314; } } namespace s4{ int x = 520; } } int main(){ using s1::x; cout << x << endl; cout << s1::x << endl; //cout << y << endl; cout << s1::s2::y << endl; using s1::s2::y; cout << y << endl; using namespace s1; using s2::y; //using namespace s3; using namespace s1::s2::s3; cout << z << endl; using namespace s4; cout << x << endl;//有两个免费精选名字大全空间中都有x 因为它们对当前作用域没有优先级关系 所以会有歧义 return 0; }
using namespace 外层免费精选名字大全空间;
using namespace 里层免费精选名字大全空间;
using namespace 外层免费精选名字大全空间::里层免费精选名字大全空间;
注意: 如果用using namespace 免费精选名字大全空间;进行免费精选名字大全空间声明当前作用域可见 如果不同的两个作用域中含有相同免费精选名字大全和标识符,不访问没问题 但是如果用直接访问,则会产生歧义 using namespace 免费精选名字大全空间; 进行声明不会有歧义 using 免费精选名字大全空间名::标识符 可能会有歧义
举个例子来说明
#include <iostream> using namespace std; namespace s1{ int x = 1111; } namespace s2{ int x = 9527; } int main(){ cout << s1::x << endl; cout << s2::x << endl; using namespace s1; cout << x << endl; using namespace s2; // cout << x << endl;//会有歧义 cout << s1::x << endl; cout << s2::x << endl; using s2::x; //导入到当前作用域 cout << x << endl; cout << s1::x << endl; //using s1::x;//当前作用域中有一个x了 return 0; }
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注<计算机技术网(www.ctvol.com)!!>的更多内容!
需要了解更多c/c++开发分享C++ 命名空间–namespace总结,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/790973.html