gpt4 book ai didi

c++ - const 正确性

转载 作者:行者123 更新时间:2023-11-28 07:23:19 25 4
gpt4 key购买 nike

我有一个 const 方法,我想在其中将类 B 的一个成员的属性设置为当前实例 A(通过指针进行反向引用)

A 类:

void A::foo () const
{
...
...
B b;
b.setA(this);
...
}

B 类:

setA(A * Ap){
this->pointerToA = Ap;
}

B * getA() {return pointerToA;}

A* pointerToA;

编译器不允许这样...好的现在我试着

B 类:

setA(const A * Ap){
this->pointerToA = Ap;
}

const A * getA() {return pointerToA;}

const A* pointerToA;

这解决了原来的问题,但是现在我不能调用 B:

...
this->getA()->anotherMethodOfA();
...

因为我得到“无法将‘this’指针从‘const A’转换为‘A&’”

虽然我理解上面的问题,但我想不通,现在如何调用另一个方法,问题是什么...为什么错误消息中有 A&,因为我无处引用 A?

最佳答案

因为 A 是一个常量指针,您只能在其上调用 const 方法。有两种可能的解决方案:

  1. 如果您需要在 A 上调用非常量方法:从 void A::foo () const 中删除 const 说明符,因为该函数实际上是在修改this 通过对 B 的调用。
  2. 如果您不需要在 A 上调用非常量方法:使 anotherMethodOfA 以及在 B 中对 A 调用的任何其他方法也为 const

你得到的错误是合法的,否则你将违反纯方法的定义。

如果您需要将 foo 设为 const 并且在 foo 内部的 A 上调用的方法不要以可见的方式更改它公共(public)接口(interface)(例如执行一些缓存等),您也可以尝试使用带有修改字段的 mutable 说明符。但请不要滥用此功能!

关于c++ - const 正确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19105774/

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