c++ - 修改 const 函数中的非 const 属性

标签 c++

所以我有一个具有以下功能的类: void AddNoiseToAim(Vector2D& position) const 本质上是一个效用函数。

为了正确计算噪声,我使用了一个需要大量初始化的复杂对象,以避免在每次调用函数时都这样做,我决定将该对象作为类的非 const 属性,因此初始化是在实例化时执行一次,然后由函数多次使用。

问题是 AddNoiseToAim 是 const 而属性不是,所以我不能在函数中使用它,但是属性只用于这个特定目的所以唯一保留我的东西把它放在函数的范围内就是对象的初始化。

我现在想到了 3 个解决方案,第一个是删除 AddNoiseToAim 的 const 修饰符,但我不想这样做,因为本质上这个函数不会修改类的实例。第二种解决方案是将属性作为对函数的引用传递,就像它对参数位置所做的那样,但即使那样也感觉有点奇怪,因为它就像绕了个弯路。最后,我现在使用的解决方案是做类似的事情,但它会给我带来内存问题:

void Raven_WeaponSystem::AddNoiseToAim(Vector2D& AimingPos) const
{
    static FuzzyModule* fuzzyModule = InitializeFuzzyModule();
    /* omitted */
}

FuzzyModule 不再是类的属性。

在我的例子中,Raven_WeaponSystem 与应用程序具有相同的生命周期,所以我并不真正关心丢失的内存,但它真的感觉不太好。

总结一下!我希望函数在第一次调用函数时仅在其范围内初始化一次对象,或者我希望对象在函数外部初始化并在常量函数中使用(在这种情况下,我的第二个解决方案就足够了) .

感谢您的宝贵时间!干杯。

最佳答案

如果您不能在构造函数中初始化 fuzzyModule,请在类中将其声明为 mutable(这将允许您在 const< 中修改其值 函数)。

mutable FuzzyModule *fuzzyModule;

关于c++ - 修改 const 函数中的非 const 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33931566/

相关文章:

c++ - 友好性和访问级别的继承

c++ - MSBuild - 无法打开包含文件(尽管列在 INCLUDE 列表中)

c++ - 如何为我的对象重载 cout?

c++ - 在 C 中奇怪的类型转换好奇心

c++ - 两张 map 不匹配

c++ - 使用包含指针的队列时的奇怪行为

c++ - 使用 C++0x : call to deleted constructor of 时的 clang++ 错误消息

c++ - 如何正确转换日期时间字符串的 utc 时间位移?

c++ - 清理代码的正确方法是什么?

c++ - OLEDragDrop 事件与已编译的 exe 一起使用,但在调试时不起作用