允许 const 成员函数使用 mutable 编辑一些成员变量

Allow const member function to edit some member variable using mutable

我想应用 Memoization 技术来提高 "Line" class 的性能,它是这样的:

class line{
    public:
        line() = default;
        ~line() = default;

        float segment_length() const;

        Tpoint first;
        Tpoint second;
    };

如你所见,成员函数segment_length被标记为const,因为它只是计算长度,并不影响class。但是,在应用 Memoization 之后,class 行变为:

class line{
    public:
        line() = default;
        ~line() = default;

        float segment_length();

        Tpoint first;
        Tpoint second;

    private:
        float norm_of_line_cashed = -1; //for optimization issue
    };

成员函数segment_length不再是常量,因为它改变了norm_of_line_cashed memebnre 变量。

问题:

在这种情况下正确的方式是什么:

我会将 segment_length 标记为 const,并将 norm_of_line_cashed* 标记为 mutable

这是遵循逻辑常量而不是按位物理常量的概念。你只是在修改外部世界不可见的内部状态,所以即使你在技术上修改你的 class,逻辑常量也会被保留。这正是 mutable 的目的,这似乎是一个可靠的设计选择。

一个注意事项:您可能希望有一些 bool 变量(或 std::experimental::optional)来跟踪您是否有缓存的值,而不是依赖于脆弱且可以导致以后头痛。

*也许你的意思是 "cached"。