首页 >后端开发 >C++ >Const 与非 Const Getters:有比强制转换更好的方法吗?

Const 与非 Const Getters:有比强制转换更好的方法吗?

Susan Sarandon
Susan Sarandon原创
2024-12-07 05:22:13572浏览

Const vs. Non-Const Getters: Is There a Better Way Than Casting?

常量和非常量获取器:一个优雅的解决方案

具有常量和非常量变体的重载获取器提出了编程难题。直接从另一个实现一个会导致编译错误,迫使开发人员诉诸强制转换。有没有更优雅的方法?

挑战

考虑以下带有 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn