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