我怎样才能更好地学会"不为你不能使用的东西买单"?

时间:2015-02-03 17:23:27

标签: c++ performance idiomatic

我刚刚得到this question的答案,在底线告诉我:“做X没有意义,因为它会让你付出你可能不会使用的东西。”

我发现这个格言难以理解;我的直觉更倾向于看到我认为清晰的语义,用“在他们的位置”定义的东西。更一般地说,我不能立即意识到hidden costs and secret tariffs对于特定设计选择会是什么?

这是否包含在C ++上的(非参考)书籍?是否有一些在线相关的地方可以更好地启发自己遵循这一原则?

3 个答案:

答案 0 :(得分:2)

在你提出的情况下,它不像看起来那么笼统。

  

做X并没有意义,因为它会让你付出代价   可能不会使用。

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

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

答案 1 :(得分:0)

尽管问题过于宽泛并且要求提供非现场材料,但我认为应该得到答案是有趣的。请记住,C ++最初只是“带有类的C”,现在仍然可以在不使用C ++为您提供的任何好的抽象的情况下编写基本上是C代码的内容。例如,如果你不想要使用异常的成本,那么不要使用它们,如果你不想要RTTI(虚函数)的成本,那么不要使用它们,如果你不想要的开销使用模板...等。

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

答案 2 :(得分:0)

  

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

不支付你不使用的东西的关键"是抽象。当您清楚地理解类或函数的用途时,您可以使用尽可能少的开销添加类和函数正常工作所必需的数据和参数。

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

你必须对函数的参数保持警惕。您不希望用户承担提供不合理的论据的负担。你也不想通过做出隐藏的假设来遗漏任何论据。