匿名名字空间提供了类似在全局函数前加 static 修饰带来的限制作用域的功能。它的这种特性可以被用在struct和class上, 而普通的static却不能。
================
未命名的名字空间中定义的名字只在包含该名字空间的文件中可见,但其中的变量的生存期却从程序开始到程序结束。如果有多个文件包含未命名的名字空间,这些名字空间是不相关的,即使这些名字空间中定义了相同的名字,这些名字也代表不同的对象。
================
以上应该很清楚了。
#include <iostream>
using namespace std;
int a=10;
namespace
{
int a = 20;
void fun1()
{
cout << a << endl;
}
}
int main()
{
fun1();
return 0;
}
但根据“但其中的变量的生存期却从程序开始到程序结束。”如果你在匿名名字空间中分配了太多内存,这不是个好办法。
这是C++才会有的语言特性
假如你使用一个程序库,他里面有桓霰淞拷衋bc,但是你自己也不小心定义了一个叫abc的变量,这样就会引起重定义错误所以为了避免这种现象,C++引入了名字空间(namespace)的概念,编写程序库的时候最好把所有东西放在一个namespace中,例如
namespace MY
{
int abc;
char cab;
}
这样,你在外界就要通过MY::abc来访问MY里面的abc,而如果你自己在外面定义了一个叫abc的变量,不会引起重定义的错误直接调用abc会调用你自己定义的abc,而只有用MY:abc才会真正调用出MY里面的abc
但是这样未免太麻烦,如果你确保你不会重复使用别人程序库里的名字,你就可以把他的名字空间里所有名字全部调出,这个过程就是using namespace,例如我输入
using namespace MY;
这样,下面我再调用abc时,就会自动调用MY里面的abc了
相当于文件夹的意思,为了能够更好的找到和识别文件。
namespace,即名字空间,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。
不定义名字空间的情况下,都属于全局名字空间,同一个名字空间可以定义多次,名字空间除了系统定义的名字空间之外,还可以自己定义,定义名字空间用关字namespace,使用名字空间时用符号指定。
不指定名字空间的变量或函数都是当前名字空间下的变量或函数。
用别名指定名字空间名字空间可以一层层嵌套,指定时也得一层层地指定,这样很不方便,一般用别名代替就方便多了。
没有名字的名字空间名字空间的名字也可以省略,称之为无名名字空间,无名名字空间经常被使用,其作用是“内部可以引用,而外部不能引用。
命名空间是一种体系,而std只是其一种实例,即std是用如下方式定义的
namespace std
{
}
是在头文件中被定义的
你可以不用using namespace std;
只需要像使用自己定义的名空间那样
例如std::cin之类的用法,也是可行的
以上就是关于c++匿名名字空间问题全部的内容,包括:c++匿名名字空间问题、c语言关键词using namespace意思、什么是命名空间,为什么要使用命名空间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)