我在这里阅读了这个关于const 正确性的问题。this
Scott Meyer 解决方案似乎是一个很好的解决方法,但是如果您有一个使用指针的成员函数(需要 const 和非 const 版本)怎么办。如果成员函数是const
然后this
自动表示,这会使在大部分代码所在的地方 const this
很难有一个函数。const
我想到的一种可能的解决方法是简单地this
将对 const 函数的引用作为参数传递,因此该函数可以使用该引用而不是直接使用this
指针。但是,这样安全吗?它似乎是安全的(如果非常 hacky),因为您实际上并没有const_cast
在 const 对象上使用。相反,您只是const
通过向其传递对象的非常量引用来规避成员函数提供的合同。
例如:
class Foo
{
private:
template <class SelfReference>
void f1(SelfReference& self) const
{
// We now might have a non-const reference to "this", even though
// we're in a const member function. But is this safe???
}
public:
void f2()
{
f1(*this);
}
void f2() const
{
f1(*this);
}
};
这似乎提供了一种很好的方法来避免在需要函数的 const 和非 const 版本时复制大量代码,但这安全吗?或者它会以某种方式导致未定义的行为?