【发布时间】:2011-12-13 02:51:28
【问题描述】:
我有一个成员函数返回一个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 的非 const 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?
如何从返回 const 引用甚至调用 setter 的函数中获取非 const 引用?
感谢您的关注
【问题讨论】:
-
为什么需要非常量指针?这似乎违反了 constness 的全部目的。
-
我也想问和templatetypedef一样的问题。如果你想“入侵”,请明确澄清,这样人们就不会说你的设计是错误的来唠叨你。
-
这有点令人费解。首先,您的
State类甚至不是有效的 C++ 代码(您将引用扔到 ctor 中的指针中)。然而,更令人困惑的是changeStuff是State的成员,但您想用City对象调用它(这两种类型是否发生相同的方法?为什么还要在这里提到它?)。此外,您的ref变量不是参考。
标签: c++ oop const-cast