1.关于命名空间
如果写成
int a = 0;
void main()
{
}
当然是处于全局命名空间了,你可以在main()中调用::a
即可知道a是处于全局命名空间的
不过个人认为即使写成
void main(){
int a=0;
}
a写在main函数里,它也是处于全局命名空间的,只不过你不能使用::a而已,原因是a在全局空间中不可见。
举个例子:
#include<iostream>
namespace kk
{
int bb()
{
int kb=0;
return kb;
}
}
int main()
{
int a=1;
std::cout<<kk::kb<<std::endl;
return 0;
}
编译这个会发现kk空间中没有kb,因为kb是kk::bb函数内的一个变量,kk空间外对这个值不可访问,不过kb仍然是属于kk空间的,同样的道理,你写的这个程序应该a也是属于全局空间的,只是不能用::a访问
2.什么是命名空间
既“命名空间”,也称“名称空间”
VS.NET中的各种语言使用的一种代码组织的形式 通过名称空间来分类,区别不同的代码功能 同时也是VS.NET中所有类的完全名称的一部分 如同名字一样的意思,NameSpace:名字空间,之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象,对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或函数(不可避免),使用起来就有问题了,为了解决这个问题,引入了名字空间这个概念,通过使用using namespace xxx;你所使用的库函数或变量就是在该名字空间中定义的.这样一来就不会引起不必要的冲突了.
简单举个例子说明:
比如你说 天安门,如果你是在北京,大家都知道你说的北京的天安门
但是倘若你不在北京,在别的城市也许也有个叫天安门的地方
这个时候你光说天安门 就不能准确的指定一个地点
所以你要声明一下是哪里的天安门
这个声明 其实就是命空间 的意义所在
3.什么是命名空间
命名空间一般指namespace,是VS.NET中的各种语言使用的一种代码组织的形式 通过名称空间来分类,区别不同的代码功能 同时也是VS.NET中所有类的完全名称的一部分。
命名空间是用来组织和重用代码的。如同名字一样的意思,NameSpace(名字空间),之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象。
扩展资料通常来说,命名空间是唯一识别的一套名字,这样当对象来自不同的地方但是名字相同的时候就不会含糊不清了。使用扩展标记语言的时候,XML的命名空间是所有元素类别和属性的集合。
元素类别和属性的名字是可以通过唯一XML命名空间来唯一。在XML里,任何元素类别或者属性因此分为两部分名字,一个是命名空间里的名字另一个是它的本地名。
在XML里,命名空间通常是一个统一资源识别符(URI)的名字。而URI只当名字用。
主要目的是为了避免名字的冲突。参考资料来源:百度百科-namespace。
4.c语言using namespace std什么意思
using namespace std指调用命名空间std内定义的所有标识符。
使用“using namespace std”后,命名空间中的标识符就如同全局变量一样。
由于标准库非常大,程序员可能会选择类的名称或函数名称,就像它是标准库中的名称一样。因此,为了避免这种情况导致的名称冲突,标准库中的所有内容都放置在命名空间Std中。
但这将带来新的问题:无数的原始C语言代码依赖于伪标准库中的功能,这些功能已经使用多年,都在全局空间中。
所以就有了诸如<iostream.h>;和<iostream>;这样的head文件,一种是与以前的C语言代码兼容,另一种是支持新标准。
扩展资料:
C语言中调用using namespace std的意义:
1、在同一命名空间、相同作用域中,任何名字须具有唯一性。
2、每个结构和联合内部都有自己的命名空间(独立于其他空间)。
3、结构标签、联合标签、枚举标签共用一个命名空间(独立于其他空间)。
4、goto使用的标签名,只要在同一函数内部唯一(独立于其他空间)。
5、所有其他情况共用一个命名空间,如变量、所有枚举常量、typedef定义的别名等(独立于其他空间)。
参考资料来源:搜狗百科-namespace
5.c++命名空间具体表现究竟是什么
#include <iostream>
using namespace std;
namespace NameSpaceA//namespace为关键字,NameSpaceA为定义的命名空间
{
int a = 0;//在NameSpaceA中定义一个a
}
namespace NameSpaceB//定义另一个命名空间
{
int a = 1;//在NameSpaceB中定义一个a,这两个a的访问
namespace NameSpaceC//嵌套
{
struct Teacher
{
char name[10];
int age;
};
}
}
int main()
{
using namespace NameSpaceA;//使用方法一:在最前面写上就像using namespace std;
printf("a= %d\n", a);//这个a就是NameSpaceA里面的a了
printf("a= %d\n", NameSpaceB::a);//使用方法2,空间名::变量
//方法一使用Teacher
using namespace NameSpaceB::NameSpaceC;
Teacher t1 = {"aaaaa", 25};
//方法二使用Teacher
NameSpaceB::NameSpaceC::Teacher t2 = {"bbbbbb", 22};
return0;
}另外,std是c++标准命名空间,c++标准程序库中的所有标识符都被定义在std中,比如标准库中的类ostream 、istream等。但是在头文件iostream中并没有声明这一空间,需要程序员手动写上using namespace std; 如果不写,则在使用std::cout<<"hello。"<<endl;这样的格式。
命名空间是为了防止使用C++做大型程序的时候发生串包。
欢迎回复讨论