有人可以阐明访问 C++ 类中定义的枚举的语义吗?
特别是,为什么枚举成员是通过类名而不是枚举本身来访问的?鉴于 theenum
是容器/范围,就像namespace
和class
是一样,为什么访问容器的元素时它是一个enum
而不是当它是一个时class
?
给定
namespace mynamespace
{
class myclass
{
public:
enum myenum
{
enum1,
enum2
};
int myint;
};
}
为什么enum1
mynamespace::myclass::enum1
and not的完全限定名称是mynamespace::myclass::myenum::enum1
?
虽然后者“有效”,但它不是“推荐”的调用方式,一些编译器会在那里抛出警告。恕我直言,它不仅应该是正确的,而且应该是访问它的唯一方式。
它产生了非常奇怪的访问规则,并且当您enum1
在不同的枚举中添加新的(此时您必须添加限定符)时使事情变得非常奇怪。
真的,它违背了枚举的目的。枚举的成员实际上是类的成员而不是枚举的成员,我必须说我发现其他语言(例如 C#)中的行为更可取。
我想这是为了保持与 C 的兼容性,但我不明白为什么在访问语义中要求枚举名称会是更好的选择......我想使类名可选将是保持 C 兼容性的选项.