C++ 分配给指针的值的存储持续时间

C++ 分配给指针的值的存储持续时间,c++,class,pointers,enums,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是否会被销毁,直到按钮被销毁?为什么注释外的

给出了以下类:

class Button {

public:

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

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

}

如果我调用
setToBlue()
BLUE
是否会被销毁,直到
按钮被销毁?为什么注释外的指令无效?

您的代码完全有效

*colorPtr = BLUE;
BLUE
的值复制到指向的对象中。在这种情况下,它是
颜色
,是
按钮
的成员,因此保证存在,直到
按钮
对象被销毁

注意

   void setToBlue() {
      color = BLUE;
   }
在这种情况下是完全相同的

要回答您的编辑问题,请执行以下操作:

为什么注释外的指令无效


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

您的代码完全有效

*colorPtr = BLUE;
BLUE
的值复制到指向的对象中。在这种情况下,它是
颜色
,是
按钮
的成员,因此保证存在,直到
按钮
对象被销毁

注意

   void setToBlue() {
      color = BLUE;
   }
在这种情况下是完全相同的

要回答您的编辑问题,请执行以下操作:

为什么注释外的指令无效


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

我认为这里有一个关于枚举是什么的基本混淆。对于此示例,最好的查看方式可能是作为#define

想象一下,你有

#define BLUE 2
然后颜色=蓝色;这将分解为颜色=2


由于“2”现在硬编码在二进制文件的内存中,所以它的作用域是全局的。

我认为这里有一个关于枚举是什么的基本混淆。对于此示例,最好的查看方式可能是作为#define

想象一下,你有

#define BLUE 2
然后颜色=蓝色;这将分解为颜色=2

由于“2”现在硬编码在二进制文件的内存中,所以它的作用域是全局的