gpt4 book ai didi

c++ - 如何获取对象的常量引用并使用该引用更改对象(使用 const_cast)?

转载 作者:行者123 更新时间:2023-11-30 03:04:39 24 4
gpt4 key购买 nike

我有一个成员函数返回对类实例的 const 引用。

例子:

class State
{
const City* city1;
public:
State(const City& c) : city1(c) {}
const City& getReference() const {return *city1;}
void changeStuff();
};

如何使用 const_cast 和 getReference() 获取指向 city1 的非常量 City *

此外,通过执行以下操作,我能够在不使用 const_cast 的情况下实现我想要的:(假设已经有一个名为 state1 的 State 实例)

City ref = state1.getReference(); //Why does it work?
City * ptr = &ref; //This is what I wanted, but not this way
ref->changeStuff(); //How can I call functions changing things if the reference was constant?

我如何从返回常量引用甚至调用 setter 的函数中获取非常量引用?

感谢您的关注

最佳答案

City ref = state1.getReference(); //Why does it work?

之所以有效,是因为那不是引用。您正在复制 const 值。试试这个:

City & ref = state1.getReference();

那是行不通的。您可以像这样使用 const cast:

City * ptr = const_cast<City*>(&state1.getReference());

只需确保该对象不是真正的常量。否则实际尝试修改它是未定义的行为。

关于c++ - 如何获取对象的常量引用并使用该引用更改对象(使用 const_cast)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8483767/

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