【发布时间】:2016-03-03 20:13:41
【问题描述】:
我想应用Memoization 技术来提高“Line”类的性能,如下所示:
class line{
public:
line() = default;
~line() = default;
float segment_length() const;
Tpoint first;
Tpoint second;
};
如您所见,成员函数segment_length 被标记为const,因为它只是计算长度而不影响类。但是,在应用了 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 不再是 const,因为它改变了norm_of_line_cashed memebnre 变量。
问题:
在这种情况下正确的方式是什么:
- 将
segment_length保留为non-const成员函数。 - 再次将其设为
const,并将norm_of_line_cashed标记为mutable。
【问题讨论】:
-
line一定要在多线程环境下工作吗? -
是和否,整个过程可以并行调用,但每个过程都有自己的行。因此,访问同一行的线程不超过一个。
标签: c++ c++11 memoization mutable