对不起,描述性问题标题不是很清楚.我不太清楚如何描述这一点,希望如果有人能够向我解释这一点,我可以在以后做得更好.
我即将来到这里并询问为什么以下示例正在运行.它展示了我希望的行为,但我不确定它为什么或是否是标准的,或者我是否对编译器感到幸运.无论如何,在整理一个最小的工作示例发布在这里,我发现它根本没有做我想的.所以这里......
struct Foo {
enum BAR { A, B, C, D, E };
private: typedef BAR BAR;
};
int main(int argc, char* argv[]) {
int x = (Foo::BAR)42;
int y = Foo::D;
}
Run Code Online (Sandbox Code Playgroud)
似乎正在发生的事情以及我非常高兴的是,Foo采用了枚举常量,之后BAR变为私有.所以我没有得到任何错误,int y =但我得到一个Foo::BAR私人错误int x=.然而,这似乎只适用于枚举中的5个或更多常量,删除它E并且它都编译好,即BAR保持公开.
什么在这里工作?谢谢.
(PS.编译器是GCC 4.4.3)
我可以验证关于四个和五个枚举元素的结果......这看起来像一个模糊的GCC错误.
至于"这里有什么用",这是由于C++中不同符号命名空间之间的技术性(继承自C).有关详细信息,请参阅此答案.
如果您不希望BAR公开名称,则只需省略标记名称:
struct Foo {
enum { A, B, C, D, E };
};
Run Code Online (Sandbox Code Playgroud)
如果你声明一个命名的公共枚举,那么无论你做什么,即使你使用typedef隐藏名称,外人也可以使用详细的类型说明符来访问枚举.试图以这种方式隐藏符号名称是徒劳的:
struct Foo {
enum BAR { A, B, C, D, E };
private: typedef BAR BAR;
};
int main(int argc, char* argv[]) {
int x = (enum Foo::BAR)42; // works great!
int y = Foo::D;
}
Run Code Online (Sandbox Code Playgroud)
当枚举名称保持私有时,是否有任何特殊原因要让常量公开?
| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |