【发布时间】:2012-04-06 12:43:05
【问题描述】:
有人可以阐明访问 C++ 类中定义的枚举的语义吗?
特别是,为什么枚举成员是通过类名而不是枚举本身来访问的?鉴于enum 是容器/作用域,就像namespace 和class 一样,为什么当它是enum 时访问容器元素的处理方式与当它是class 时不同?
给定
namespace mynamespace
{
class myclass
{
public:
enum myenum
{
enum1,
enum2
};
int myint;
};
}
为什么enum1 mynamespace::myclass::enum1 是完全限定名称而不是mynamespace::myclass::myenum::enum1?
虽然后者“有效”,但它不是“推荐”的调用方式,一些编译器会在那里抛出警告。恕我直言,它不仅应该是正确的,而且应该是访问它的唯一方法。
它产生了非常奇怪的访问规则,当你在不同的枚举中添加一个新的enum1 时,事情变得非常奇怪(此时你必须添加限定符)。
真的,它违背了枚举的目的。枚举的成员实际上是类的成员而不是枚举的成员,我必须说我发现其他语言(例如 C#)中的行为更可取。
我想这是为了保持与 C 的兼容性,但我不明白为什么在访问语义中要求枚举名称会是更好的选择...我想制作 class name optional 将是保留 C 兼容性的选项。
【问题讨论】:
-
我认为这与 C 兼容性有关,但如果应该考虑使用添加到 C++11 中的
enum class,它们会遵守正确的语义`