C ++:当前命名空间是否覆盖其他命名空间

时间:2014-09-27 02:24:44

标签: c++ namespaces

我正在写一个包含内容的图书馆:

namespace david {
  typedef enum {
    BAR
  } CommonEnum;

  class Foo {
    void fooBar () {
      std::cout << BAR << std::endl;
    }
  }
}

让我们说用户写文件

typedef enum {
  BAR = 1
} CommonEnum;

#include <david.h>

Foo myFoo();

myFoo.fooBar();

会打印什么?如果会打印0,那可靠吗?我知道我可以在BAR中使用david::Foo作为前缀,使其显示为david::BAR,这样可以肯定地回答问题(这是我目前正在做的事情)但是它变得非常冗长,我试图坚持80个字符的限制,这意味着我的代码越来越难以阅读。

1 个答案:

答案 0 :(得分:0)

Foo

中拥有课程BAR和枚举namespace david
void fooBar () {
    std::cout << BAR << std::endl;
}

会将BAR解析为最适用的范围。因此

typedef enum {
    BAR = 1
} CommonEnum;

赢得&#34>&​​#34;覆盖&#34; namespace david的定义。