【发布时间】:2018-04-17 16:21:43
【问题描述】:
如果我有课File
class File {
public:
File(int length);
getLength(); //returns length int value
int length;
}
在File.value(暗示它不是私有的/其他任何东西,因此可以直接访问)和File.getValue()之间,哪个选项对性能影响较小?
【问题讨论】:
-
我们不要考虑速度,而是考虑封装。我应该能够直接访问
length吗?如果是这样,则根本没有理由拥有吸气剂。如果我不应该使用吸气剂。 -
@arrowd a)它不会在任何半体面的编译器上。 b) 考虑这种微优化是适得其反的缩影
-
如果函数的主体是
{ return length; }并且编译器无法优化它,我也不相信它会优化任何其他代码。 -
优化器完成后,对我来说看起来差不多。除非我做愚蠢的事情,否则带有 -O3 的 GCC 4.8 到 7.3 的样本都会为两者提供
mov edi, DWORD PTR [rdi]。 -
封装点远比速度重要。如果最终用户可以更改
length并对您的代码产生负面影响,那么它有多快并不重要。有人会打破它。然后责怪你。