gpt4 book ai didi

c++ - 如果现在不修改传递的对象,但可以稍后修改,我应该使用 const

转载 作者:行者123 更新时间:2023-11-30 02:01:56 26 4
gpt4 key购买 nike

我正在编写一个游戏,其中每个数据对象都由 ControlView 显示。当 ControlView 设置为显示数据对象时,不应更改它。我想使用 const 来强制执行此约定。但是,为了响应用户稍后与 ControlView 的交互,数据可能会被修改。所以需要存储一个非常量指针。我想知道这是否被接受并正确使用 const_cast?。下面是骨架代码

class Data
{
int m_int;
public:
void add(int i) { m_int += i ; };
};

class ControlView
{
Data* m_data;
public:
void set_data(const Data* d) //this call should not change d
{
m_data=const_cast<Data*>(d); //cast needed to compile
};

void manipulate_data(int x)
{
m_data->add(x);
}
};

最佳答案

在这种情况下,不,不要使用const。如果这样做,您将允许任何人将 const 作为参数传递,并且之后可能最终会遇到未定义的行为:

 const Data d;
ControlView c;
c.setData(&d); //legal, because setData takes a const as parameter
c.manipulateData(0); //undefined behavior, modifying an originally const object

关于c++ - 如果现在不修改传递的对象,但可以稍后修改,我应该使用 const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13666558/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com