内联getter和setter与公共变量

时间:2013-01-17 09:55:11

标签: c++ oop

我在某些程序中看到,建议使用public变量代替getset函数以获得更好的性能。我知道这被认为是一种不好的做法。我也知道编译器可以生成getset inline。这是不是意味着他们的行为就像一个没有性能下降的变量?

3 个答案:

答案 0 :(得分:4)

编译器很可能内联这些函数,并且不会有函数调用开销。我会避免使用getter / setter和public成员变量,并考虑为什么使用这些变量并提供在该类中执行此操作的函数。大多数getter / setter / public成员变量都可以通过这种方式删除。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

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

但是,如果由于某种原因,编译器将使它们内联,那么显然会失去一些调用性能。

相关问题