为什么使用指针(类私有字段)编辑值需要声明附加变量?

问题描述 投票:0回答:1

我定义了三个简单的文件:

主.cpp

#include <iostream>
#include "EventHandler.h"

int main(int argc, char *argv[])
{
    bool myFlag = true;

    EventHandler eventHandler = EventHandler(&myFlag);

    std::cout << myFlag << std::endl;
    eventHandler.update();
    std::cout << myFlag << std::endl;
}

EventHandler.h

#pragma once

class EventHandler
{
private:
    bool *myFlag;

public:
    EventHandler(bool *myFlag);

    void update();
};

事件处理程序.cpp

#include "EventHandler.h"
#include <iostream>

EventHandler::EventHandler(bool *myFlag)
{
    this->myFlag= myFlag;
}

void EventHandler::update()
{
    this->myFlag = false;
    // bool *tempVar = this->myFlag;
    // *tempVar  = false;

    std::cout << *this->myFlag << std::endl;
};

我想做的是使用

myFlag
类中的
update
函数修改
EventHandler
的值。我设法通过替换来实现这一点:

this->myFlag = false;

与:

bool *tempVar  = this->myFlag;
*tempVar  = false;

但是这个解决方案对我来说似乎违反直觉,因此问题是(如果是的话那么如何)是否可以在不需要声明“临时变量”的情况下实现相同的结果,也许我敢只在一行中说?

c++ class pointers variable-assignment
1个回答
0
投票

赋值时,您不仅需要取消引用

this
,还需要取消引用
this->myFlag

void EventHandler::update()
{
    *this->myFlag = false;

    std::cout << *this->myFlag << std::endl;
};

但是你根本不需要

this
,明确地。没有本地
myFlag
变量可以消除歧义。

void EventHandler::update()
{
    *myFlag = false;

    std::cout << *this->myFlag << std::endl;
};
© www.soinside.com 2019 - 2024. All rights reserved.