关于c ++:允许const成员函数使用mutable编辑某个成员变量

Allow const member function to edit some member variable using mutable

我想应用Memoization技术来提高"Line"类的性能,如下所示:

1
2
3
4
5
6
7
8
9
10
class line{
    public:
        line() = default;
        ~line() = default;

        float segment_length() const;

        Tpoint first;
        Tpoint second;
    };

如您所见,成员函数segment_length标记为const,因为它只计算长度而不影响类。 但是,在应用Memoization之后,类线成为:

1
2
3
4
5
6
7
8
9
10
11
12
13
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不再是const,因为它改变了norm_of_line_cashed memebnre变量。

问题:

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

  • segment_length保留为non-const成员函数。
  • 再次将其设为const并将norm_of_line_cashed标记为mutable


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

这遵循逻辑常量的概念而不是按位或物理常量。 您只修改了外部世界不可见的内部状态,因此即使您在技术上修改了类,也会保留逻辑常量。 这正是mutable的用途,这似乎是一个可靠的设计选择。

一个注意事项:您可能希望有一些bool变量(或std::experimental::optional)来跟踪您是否有缓存的值而不是依赖于易碎的标志值,并且可能导致将来出现令人头疼的问题。

*也许你的意思是"缓存"。