【问题标题】:How can I better learn to "not pay for what you don't use"?我怎样才能更好地学会“不为你不使用的东西付费”?
【发布时间】:2015-04-03 00:11:07
【问题描述】:

我刚刚得到了this question 的答案,其中最重要的是告诉我:“做 X 没有意义,因为它会让你为你可能不会使用的东西付费。”

我发现这条格言很难遵循;我的直觉更倾向于看到我认为清晰的语义,将事物定义为“在他们的位置”。更一般地说,我并没有立即意识到 hidden costs and secret tariffs 对于特定的设计选择是什么?。

C++ 的(非参考)书籍是否涵盖了这一点?网上有没有相关的地方可以更好地启发自己遵循这个原则?

【问题讨论】:

  • “不为不使用的东西付费”是 C++ 语言和标准库的设计理念。您的 C++ 程序不需要遵循相同的理念。

标签: c++ performance idioms


【解决方案1】:

在您提出的情况下,它并不像看起来那样笼统。

做 X 没有意义,因为它会让你为你所做的事情付出代价 可能不会用。

这只是一个声明,如果可以,请避免使用虚函数。它们增加了函数调用的开销。

虚拟函数通常可以通过使用模板和常规函数调用来重新设计。一个 std:: 示例是std::vector。例如,在 Java 中,Vector 实现了可在算法中使用的接口。通过虚函数调用实现。 std::vector 使用迭代器。

【讨论】:

    【解决方案2】:

    我怎样才能更好地学会“不为不使用的东西付费”?

    “不为不使用的东西付费”的关键是抽象。当您清楚地了解类或函数的用途时,您可以添加对类和函数正常工作绝对必要的数据和参数,同时尽可能减少开销。

    您必须非常警惕将成员变量、成员函数(虚拟和非虚拟)添加到类中。每个成员变量都会增加类的内存需求。每个成员函数都需要维护。虚拟成员函数的存在增加了类的内存需求以及运行时的小损失。

    你必须对函数的参数非常警惕。您不希望用户因提供没有意义的参数而感到负担。您也不想通过做出隐藏的假设而遗漏任何论点。

    【讨论】:

    • 但是如果: 1. 为了少付钱,你需要改变意义或目的?或者 2. 您是设计软件组件的人,需要指定这些含义或用途?
    • @einpoklum,如果没有具体的例子及其用法,很难回答这个问题。
    • 我正在寻找类似令人大开眼界的具体例子的描述,以供学习。在希伯来语中,它被称为“试图刮别人的胡须”。
    【解决方案3】:

    尽管问题过于宽泛并要求提供非现场材料,但我认为这很有趣,值得回答。请记住,C++ 最初只是“带有类的 C”,今天仍然可以编写基本上是 C 代码的内容,而无需使用 C++ 提供的任何好的抽象。例如,如果您不想要使用异常的成本,则不要使用它们,如果您不想要 RTTI(虚拟函数)的成本,则不要使用它们,如果您不想要开销使用模板...等

    至于资源,我将打破规则并推荐Game Programming Patterns,尽管它的名称是编写高性能 C++ 的一个很好的通用指南。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-12
      • 2021-02-02
      • 2023-01-22
      • 2023-03-16
      • 1970-01-01
      相关资源
      最近更新 更多