分类: C/C++
2011-12-15 09:32:34
- #include <stdio.h>
- namespace A {
- int ID = 1;
- }
- namespace {
- int ID = 11;
- }
- namespace B {
- int ID = 21;
- }
- int main(void){
- printf("ID %d \n",ID);
- }
输出
- ID 11
这里用到是C的函数,减少std空间的干扰。这里输出的是匿名空间的内容。那么就类似于如下用法
- namespace __UNIQUE_NAME_ {
- int ID;
- }
- using namespace __UNIQUE_NAME_;
如果修改代码如下
- #include <stdio.h>
- namespace A {
- int ID = 1;
- }
- namespace {
- int ID = 11;
- }
- namespace B {
- int ID = 21;
- }
- namespace {
- int ID = 41;
- }
- int main(void){
- printf("ID %d \n",ID);
- }
编译报错,如下
- t_anonymity_space.cpp:14: error: redefinition of ‘int
::ID’ - t_anonymity_space.cpp:7: error: ‘int
::ID’ previously defined here
在不同的文件中呢
- //file def.h
- namespace {
- int ID = 41;
- }
- #include <stdio.h>
- #include "def.h"
- namespace A {
- int ID = 1;
- }
- namespace {
- int ID = 11;
- }
- namespace B {
- int ID = 21;
- }
- int main(void){
- printf("ID %d \n",ID);
- }
编译报错
- t_anonymity_space.cpp:7: error: redefinition of ‘int
::ID’ - def.h:3: error: ‘int
::ID’ previously defined here 这里说明匿名namespace是在一个空间里。引用其他空间以后的用法
- #include <stdio.h>
- namespace A {
- int ID = 1;
- }
- namespace {
- int ID = 11;
- int id = 12;
- }
- namespace B {
- int ID = 21;
- }
- int main(void){
- printf("ID %d \n",ID);
- using namespace A;
- printf("ID %d - %d - %d \n",A::ID, ::ID, id);
- }
输出
- ID 11
- ID 1 - 11 - 12
引用了其他空间,并且此时此时如果使用匿名空间都是在同一个空间,并且同名的必须加上::加以区分。我在这里猜测一下,全局变量是不是就是在默认的匿名空间的呢?从现象来看,八成是。
- C++匿名命名空间 http://blog.csdn.net/fxpbupt/article/details/5600937