我在某些程序中看到,建议使用public
变量代替get
和set
函数以获得更好的性能。我知道这被认为是一种不好的做法。我也知道编译器可以生成get
和set
inline
。这是不是意味着他们的行为就像一个没有性能下降的变量?
答案 0 :(得分:4)
编译器很可能内联这些函数,并且不会有函数调用开销。我会避免使用getter / setter和public成员变量,并考虑为什么使用这些变量并提供在该类中执行此操作的函数。大多数getter / setter / public成员变量都可以通过这种方式删除。
答案 1 :(得分:1)
您总是可以期望编译器内联琐碎的getter和setter,因此您将获得相同的性能。
但是可能存在差异,例如,如果按值返回,则在使用getter / setter时无法获取指向私有成员的指针或引用。此外,setter可能还有额外的复制或移动操作。
无论如何,如果你想要公共访问,那么只需使用公共变量。它们是最佳实践。
答案 2 :(得分:1)
它们应该在性能方面相同,如果编译器真的选择使它们内联。 inline
关键字只是编译器的提示,它不能严格遵守它,反之亦然:它可以创建一个没有用inline
关键字标记的函数,一个内联函数。
但是,如果由于某种原因,编译器将不使它们内联,那么显然会失去一些调用性能。