gpt4 book ai didi

c++ - 如何在 C++ 中丢弃 const

转载 作者:太空狗 更新时间:2023-10-29 23:42:40 27 4
gpt4 key购买 nike

这是我想做的,但我做不到:

#include <string>
using namespace std;
class A {
public:
bool has() const { return get().length(); }
string& get() { /* huge code here */ return s; }
private:
string s;
};

我得到的错误是:

passing ‘const A’ as ‘this’ argument of
‘std::string& A::get()’ discards qualifiers

我知道问题出在哪里,但我该如何解决呢?我真的需要 has() 成为 const。谢谢。

最佳答案

添加 get() 的第二个重载:

string const & get() const { return s; }

这将在 const 上调用类的类型化对象 A .

在实践中,我更喜欢添加 const -typed 访问器,然后将修改完全保留在类内部,甚至完全避免修改。例如,这意味着有一个方法 DoUpdateLabel(){/*do something with s*/}而不是暴露内部结构。这具有很好的副作用,您可以在许多情况下避免重复访问器。

如果您绝对必须通过访问器进行修改并且您也不想要额外的 const 包装器,您可以使用 const_cast<> :

bool has() const { return const_cast<A*>(this)->get().length(); }

但是,如果 get()有副作用和has()声明const ,这是否是您真正想要的行为值得怀疑。

关于c++ - 如何在 C++ 中丢弃 const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2912445/

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