给出以下课程:
class Button {
public:
enum Color{RED, GREEN, BLUE};
Color color = RED;
void setToBlue() {
Color* colorPtr = &color;
*colorPtr = BLUE;
//colorPtr->BLUE;
}
}
如果我致电setToBlue()
,BLUE
会被销毁,Button
会被销毁吗?为什么out评论指令无效?
答案 0 :(得分:5)
您的代码完全有效。
*colorPtr = BLUE;
将BLUE
的值复制到指向的对象中。在这种情况下,color
是Button
的成员,因此保证在Button
对象被销毁之前存在。
请注意
void setToBlue() {
color = BLUE;
}
在这种情况下完全相同。
回答你的编辑:
为什么out评论指令无效?
因为->
所做的操作符与(*colorPtr).
相同。 .
运算符是成员访问运算符,枚举没有任何成员可以访问,因此没有意义。
答案 1 :(得分:1)
我认为这里有一个关于枚举是什么的根本混淆。可能看到这个样本的最佳方式是#define。
想象一下,你有
#define BLUE 2
然后做了color = BLUE;这将分解为color = 2
由于'2'现在已经在二进制文件的内存中进行了硬编码,因此它的范围是全局的。