1

我看到在某些程序中建议使用public变量而不是get函数set来获得更好的性能。我知道这被认为是一种不好的做法。我也知道编译器可以生成getand set inline。这是否意味着它们的行为就像一个没有性能影响的变量?

4

3 回答 3

4

编译器很可能会内联这些函数,并且不会有函数调用开销。我会避免使用 getter/setter 和公共成员变量,并思考为什么要使用这些变量,并在该类中提供一个函数来做到这一点。大多数 getter/setter/public 成员变量都可以通过这种方式删除。

于 2013-01-17T10:01:11.070 回答
1

您总是可以期望编译器内联琐碎的 getter 和 setter,因此您将获得相同的性能。

但是可能存在差异,例如如果您按值返回,则在使用 getter/setter 时无法获取指针或对私有成员的引用。此外,setter 可能有额外的复制或移动操作。

无论如何,如果您想要公共访问,那么只需使用公共变量。它们是最佳实践。

于 2013-01-17T09:58:24.783 回答
1

如果编译器真的选择将它们内联,它们在性能方面应该是相同的。关键字只是给编译器的inline一个提示,它不能严格遵守它,反之亦然:它可以使一个没有用关inline​​键字标记的函数,一个内联函数。

但是,如果由于某种原因编译器不会使它们内联,您显然会在调用上损失一些性能。

于 2013-01-17T09:58:32.527 回答