gpt4 book ai didi

c++ - 防止 const 类函数在引用成员上调用非 const 类函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:47 27 4
gpt4 key购买 nike

对不起,标题有点晦涩,但它确实说明了一切。这就是我的意思

class A
{
void DoSomething(); // non-const
}
Class B
{
public:
B(A& a) : _a(a) { }
// const function
void DoSomethingElse() const
{
// Is there a way to disallow this?
_a.DoSomething();
}
void DoEvenMore()
{
// Should be OK
_a.DoSomething();
}
private:
// Can't make it const A& because it needs
// be non-const for non-const functions
A& _a; // A reference
}

那么有什么方法可以阻止 B::DoSomethingElse() 调用 A::DoSomething() 吗?
但是,不是 constB::DoEventMore() 应该能够继续调用。

我正在使用 Visual C++ 2013。

上面的代码将在我的程序中展示一个错误。 (在我的场景中,类 A 将卸载调用代码的对象/this 指针。)由于 const-correctness 的目的是防止此类错误,我只是想知道是否有办法检查在编译时为此。

在我正在编写的应用程序中,调用该函数似乎一点也不危险。当从 DoEvenMore() 调用它时,结果是相同的,除了 B 的销毁被推迟到函数完成运行。

最佳答案

而不是使用 _a数据成员直接使用 const 创建访问函数和非 const过载。这将导致 constconst 中调用时要选择的重载B 的成员函数,这反过来会阻止您调用非 const A的功能.

A const& GetA() const { return _a; }
A& GetA() { return _a; }


void DoSomethingElse() const
{
GetA().DoSomething(); // error
}

关于c++ - 防止 const 类函数在引用成员上调用非 const 类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23620645/

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