gpt4 book ai didi

c++ - 复制、常量和非常量、getter 的优雅解决方案?

转载 作者:IT老高 更新时间:2023-10-28 11:52:30 27 4
gpt4 key购买 nike

当你拥有它时你不讨厌它

class Foobar {
public:
Something& getSomething(int index) {
// big, non-trivial chunk of code...
return something;
}

const Something& getSomething(int index) const {
// big, non-trivial chunk of code...
return something;
}
}

我们不能用另一个实现这两个方法,因为你不能从 const 版本调用非 const 版本(编译器错误) .从非 const 版本调用 const 版本需要强制转换。

有没有真正优雅的解决方案,如果没有,最接近的解决方案是什么?

最佳答案

我记得在一本 Effective C++ 书籍中,这样做的方法是通过从另一个函数中丢弃 const 来实现非常量版本。

它不是特别漂亮,但很安全。由于调用它的成员函数是非常量的,因此对象本身也是非常量的,并且允许丢弃 const。

class Foo
{
public:
const int& get() const
{
//non-trivial work
return foo;
}

int& get()
{
return const_cast<int&>(const_cast<const Foo*>(this)->get());
}
};

关于c++ - 复制、常量和非常量、getter 的优雅解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/856542/

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