首页 文章

允许const成员函数使用mutable编辑某个成员变量

提问于
浏览
4

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

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

        float segment_length() const;

        Tpoint first;
        Tpoint second;
    };

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

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变量 .

The question:

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

  • segment_length 保留为 non-const 成员函数 .

  • 再次将其设为 const 并将 norm_of_line_cashed 标记为 mutable .

1 回答

  • 4

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

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

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

    *也许你的意思是“缓存” .

相关问题