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”现在硬编码在二进制文件的内存中,所以它的作用域是全局的