【发布时间】:2013-11-05 17:49:35
【问题描述】:
我正在编写一些代码,其中类中有一个简单的枚举。另一段代码有一个指向该类的指针,并通过箭头指针访问枚举的值。
这个类究竟是如何以这种方式访问 MY_VALUE1 的? 我虽然它只允许通过 MyClass::MY_VALUE1 或 MyClass::MyEnum::MY_VALUE1 访问。
class MyClass {
public:
enum MyEnum{
MY_VALUE0 = 0,
MY_VALUE1 = 1
};
//getters, setters as appropriate
};
//Other class
MyClass* myClass = new MyClass();
//Compiles without C++11
if(getRandomEnum() == myClass->MY_VALUE1)
{
//Do Stuff
}
【问题讨论】:
-
对于投反对票的人,至少解释一下原因。
-
我怀疑答案与使用相同机制调用静态类方法时使用的类似语法糖密切相关。这是一个可见性问题,虽然我面前没有标准,但我敢肯定它在某个地方被覆盖。
-
我手头没有标准,甚至没有 IDE,但我猜嵌入式枚举中的值有点被视为静态 const 成员。 (我相信,如果您可以从空指针成功访问它们,它们是静态的)
-
@user1158692 使用空指针执行此操作充其量是实现定义的,按照标准是完全未定义的行为。我记得大约 12 年前在一次 VC++ 开发会议上看到 Don Box 做过一次,懒得扩展 ATL 模板
CComObject<MyClass>::CreateInstance调用,而是使用CComObject<MyClass> *p=NULL; p->CreateInstance(&p);调用它时,他的回答基本上是“它适用于 MS VC++ ,所以请关掉”。 -
@user1158692 你可以通过空指针访问它,我刚刚用Apple clang 5.0(基于LLVM-3.3 svn)尝试过。
标签: c++