代码之家  ›  专栏  ›  技术社区  ›  Alexander Rafferty

封装v性能

  •  3
  • Alexander Rafferty  · 技术社区  · 14 年前

    简单问题:

    例如:

    x->var;
    

    x->getVar();
    

    因为函数调用开销。有没有既快速又密封的解决方案?

    7 回复  |  直到 14 年前
        1
  •  2
  •   Olof Forshell    14 年前
    • “如果getVar函数是内联的,则没有开销”
    • “如果getVar()只是返回var;并且是内联的和非虚拟的,则应将这两个表达式优化为相同的值”

    拉弗蒂先生能假设代码是内联的吗?不是“应该”或“可以”。在我看来,这是一个C++问题:它不是特别是所见即所得:你不能确定它会生成什么代码。当然,使用OO有好处,但是如果执行效率(性能)很重要,C++(或C语言或Java)不是显而易见的选择。

    有很多人说“过早优化”是万恶之源,因为没有人知道过早优化是什么,很多程序员认为优化是万恶之源。

    在这些情况下,我发现把原来的引文拿出来是有帮助的,这样每个人都可以看到他们遗漏了什么(不是说误解和误用):

    大多数人把这句话归咎于托尼·霍尔(QuickSort之父)和唐纳德·克努特(计算机编程艺术)。

    关于报价可能意味着什么,也可能不意味着什么的信息性讨论可以在这里找到: http://ubiquity.acm.org/article.cfm?id=1513451

        2
  •  7
  •   Chubsdad    14 年前

        3
  •  5
  •   sbi    14 年前

    无间接费用

    另一方面, getters are a often code smell . 一个坏的。它们遵循封装的字母,但违反了它的原则。

        4
  •  0
  •   Luca Martini    14 年前

    您可以编写内联访问器函数。

        5
  •  0
  •   Community CDub    8 年前
        6
  •  0
  •   Tony Delroy    14 年前

        7
  •  0
  •   Fabio Fracassi    14 年前

    正如其他人所指出的,开销可以忽略不计,甚至可以完全优化。