相关疑难解决方法(0)

C++中的volatile与mutable

我对volatile和mutable之间的区别有疑问.我注意到这两个都意味着它可以改变.还有什么?它们是一样的吗?有什么不同?它们适用于哪里?为什么提出这两个想法?如何以不同的方式使用它们?

非常感谢.

c++ mutable volatile

84
推荐指数
6
解决办法
5万
查看次数

方法结果缓存时如何处理constness?

我有一个类,它的方法(getter)执行一些相对昂贵的操作,所以我想缓存它的结果。调用该方法不会改变对象的行为,但需要将其结果存储在 中this,因此它不能是 const。

问题是我现在有另一个 const 方法,我需要调用我的 getter。这个问题有一些普遍接受的解决方案吗?我是否应该绕过 getter 中的 constness 检查以使其成为 const(这不会导致优化编译器出现问题吗?)或者我必须将非 constness 传播到使用此 getter 的所有方法?

例子:

class MyClass
{
public:
    Foo &expensiveGetter() /*const?*/
    {
        if (cachedValue == nullptr) {
            cachedValue = computeTheValue();
        }
        return *cachedValue;
    }

    void myMethod() /* How to make this const? */
    {
        auto &foo = expensiveGetter();
        // etc.
    }

private:
    Foo *cachedValue = nullptr;
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找类似RefCellRust 的东西。

c++ getter design-patterns memoization

5
推荐指数
1
解决办法
262
查看次数

C++中可变的动机

可能重复:
C++'mutable'关键字
何时使用C++'mutable'关键字?

我理解mutable它的用法和方式,我想知道的是它存在的真正动机是什么.我不认为的唯一动机是绕过的不变性thisconst成员函数我宁愿认为这是给它更多的东西.
我不认为这只是在设计不良的系统中绕过问题的手段吗?或者是吗?

原始问题的明显分支何时使用mutable即使在良好的设计中也是有意义的?

c++ mutable

2
推荐指数
3
解决办法
1260
查看次数

标签 统计

c++ ×3

mutable ×2

design-patterns ×1

getter ×1

memoization ×1

volatile ×1