指定给指针的值的存储持续时间

时间:2016-10-07 10:21:45

标签: c++ class pointers enums

给出以下课程:

class Button {

public:

   enum Color{RED, GREEN, BLUE};
   Color color = RED;

   void setToBlue() {
      Color* colorPtr = &color;
      *colorPtr = BLUE;
      //colorPtr->BLUE;
   }

}

如果我致电setToBlue()BLUE会被销毁,Button会被销毁吗?为什么out评论指令无效?

2 个答案:

答案 0 :(得分:5)

您的代码完全有效。

*colorPtr = BLUE;

BLUE的值复制到指向的对象中。在这种情况下,colorButton的成员,因此保证在Button对象被销毁之前存在。

请注意

   void setToBlue() {
      color = BLUE;
   }

在这种情况下完全相同。

回答你的编辑:

  

为什么out评论指令无效?

因为->所做的操作符与(*colorPtr).相同。 .运算符是成员访问运算符,枚举没有任何成员可以访问,因此没有意义。

答案 1 :(得分:1)

我认为这里有一个关于枚举是什么的根本混淆。可能看到这个样本的最佳方式是#define。

想象一下,你有

#define BLUE 2

然后做了color = BLUE;这将分解为color = 2

由于'2'现在已经在二进制文件的内存中进行了硬编码,因此它的范围是全局的。