c++匿名名字空间问题

c++匿名名字空间问题,第1张

匿名名字空间提供了类似在全局函数前加 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意思、什么是命名空间,为什么要使用命名空间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10112900.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存