【发布时间】:2013-05-27 11:59:54
【问题描述】:
考虑以下代码:
struct foo {
typedef int bar;
};
namespace foo {
class baz {
/* code */
};
}
这分布在我必须处理的代码库中,有时它会起作用,但我不明白如何。
只要命名空间和类不在同一个源中(预处理后),它就可以工作(我理解那部分)。但是,如果突然间命名空间和类都被预处理器拖入同一个编译单元,它(可能)会发生冲突(我不知道这是否曾经发生在源代码中)。
是否存在允许编译器始终正确解析代码结构的约定?最合乎逻辑的是命名空间和类禁止使用相同的符号。应用的编码风格允许命名空间与类发生冲突,尽管存在歧义,因此我更喜欢一种告诉编译器使用的方法,而不是更改编码约定。
类似:
use_namespace(foo)::baz b;
use_class(foo) b;
【问题讨论】:
-
你不能同时让 foo 成为一个类/结构和命名空间,所以毫无疑问如何消除歧义。
-
我以前遇到过这种情况,但不太确定解释。据我记得,认为编译器为它们分配了不同的名称(损坏的名称)en.wikipedia.org/wiki/Name_mangling。完全谈论 C++。
-
@Nanda:他们可能有不同的错位名称,但不能保证。给类和命名空间同名是错误的。
-
感谢您的澄清。