在c++中,名称(名字)可以是符号常量,变量,宏,函数、结构,枚举,类和对象等等。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的c++库时,这些标识符的命名发生冲突,标准c++引入了关键字命名空间(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域。
MFC中并没有使用命名空间,但是在。net框架,MC + +和c++/CLI中,都大量使用了命名空间。
使用名称空间性病;
或者还有这样的:
使用std:: string;
<强>这些其实就是使用了c++的名称空间技术。强>
什么是名称空间呢?名称空间可以看做一个声明区域,其区域内的变量在内部有效,比如假设有两个名称空间:
名称空间杰克{ 双桶; 空白fetch (); } 名称空间吉尔{ 双桶; 空白fetch (); }
两个名称空间有着一样的变量,但因为是在不同的名称空间内,所以互相不会发生冲突。我们在使用时可以这样调用:
杰克::桶=12.34; 吉尔::桶=56.78; 杰克::fetch ();
所以,我们有时候也会看到这样的代码:
int x; std:: cin祝辞祝辞x; std:: cout & lt; & lt;x & lt; & lt;std:: endl;
但如果我们使用了用声明,就可以简单一点:
使用std:: cin; 使用std:: cout; 使用std:: endl; int x; , cin祝辞的在x; cout & lt; & lt;x & lt; & lt;endl;
或者更简单的,我们可以使用使用编译指令:
使用名称空间性病; int x; , cin祝辞的在x; cout & lt; & lt;x & lt; & lt;endl;
<强>其中,cin, cout, endl都是存在于std名称空间内的。强>
上面其实是两种,一个叫使用声明,一个叫使用编译指令型声明用于声明名称空间内的某一个变量或函数,而使用编译指令会将整个名称空间全部都声明。
一般而言我们建议对需要的变量或函数使用使用声明,这样就不用一股脑全部声明,难保有些变量或者函数在别的名称空间内也有,这样又会产生冲突,实际上这是不允许的。
<>强名称空间也是可以嵌套的强>
。有些名称空间没有名字:
名称空间{ int冰; int水; }
这种名称空间因为没有名字,所以不能用使用声明和使用编译指令来操作,也就不能再其他文件使用,只能在当前文件声明处到作用域结尾可用,这也就类似于静态的作用了。实际上c++不建议使用静态的,而更推荐这种做法:
静态int;//不推荐 名称空间{ int;//推荐 } int main () { … }
而名称空间用的最多的地方,就是供其他文件去访问了。就像性病一样。
<强>对于名称空间的使用,也有一些指导原则:强>
-
<李>使用已命名的名称空间中声明的变量,而不是外部全局变量或静态全局变量。李>
<李>如果开发函数库或者类库,将其放在一个名称空间中。李>
<李>不要过度使用使用编译指令。李>
<李>不要在头文件使用使用编译指令,以防产生未知影响。李>
<李>导入名称时,首选使用使用声明。李>
<李>对于使用声明,首选将其作用域设为局部而不是全局。李>
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。