常量和非常量获取器:一个优雅的解决方案
具有常量和非常量变体的重载获取器提出了编程难题。直接从另一个实现一个会导致编译错误,迫使开发人员诉诸强制转换。有没有更优雅的方法?
挑战
考虑以下带有 getSomething 方法的类:
class Foobar { public: Something& getSomething(int index); const Something& getSomething(int index) const; };
使用一种方法实现另一种方法由于 const 版本无法调用非 const 版本,因此不可行。强制转换是必要的,但感觉很麻烦并且可能会导致混乱。
解决方案:谨慎强制转换
Effective C 建议将 const 从 const 函数中丢弃,实现非常量函数。虽然视觉上不吸引人,但这是一种安全的方法。由于正在调用非常量成员函数,因此该对象必须是非常量的,并且允许丢弃 const。
这是一个示例:
class Foo { public: const int& get() const; int& get(); }; const int& Foo::get() const { // Non-trivial work return foo; } int& Foo::get() { return const_cast<int&>(const_cast<const Foo*>(this)->get()); }
按照这种方法,您可以实现类型安全的 const 和非 const getter 实现,而不会牺牲性能或引入不必要的复杂性。
以上是Const 与非 Const Getters:有比强制转换更好的方法吗?的详细内容。更多信息请关注PHP中文网其他相关文章!