有人可以阐明访问在C++类中定义的枚举的语义吗?在C++中枚举访问语义背后的理由
特别是,为什么enum成员通过类的名称而不是enum本身访问?假设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的兼容性,但我不明白为什么需要访问语义中的枚举名称将是更好的选择...我想象使类名称可选将是保留C兼容性的选项。
我认为这是与C兼容,但如果应该考虑使用一个'enum类'它被添加到C++ 11他们服从正确的语义' – 111111 2012-03-21 23:04:31