如何更好地学习"not pay for what you don't use"?
How can I better learn to "not pay for what you don't use"?
我刚刚得到了这个问题的答案,在底线告诉我:"做X没有意义,因为它会让你为你可能不会使用的东西付费。
我发现这句格言很难遵循;我的直觉更倾向于看到我认为清晰的语义,将事物定义为"在它们的位置上"。更一般地说,我不会立即意识到特定设计选择的隐性成本和秘密关税是什么?
这是否包含在C++的(非参考)书籍中?网上有没有相关的地方可以更好地启发自己遵循这个原则?
在您呈现的情况下,它并不像看起来那样笼统。
做X没有意义,因为它会让你为你的事情付出代价 可能不使用。
这只是一个声明,如果可以的话,请避免使用虚函数。它们会增加函数调用的开销。
虚拟函数通常可以通过使用模板和常规函数调用来重新设计。一个标准::示例是std::vector
。 例如,在Java中,Vector实现了可在算法中使用的接口。通过虚拟函数调用完成。 std::vector
使用迭代器。
尽管这个问题过于宽泛并要求提供场外材料,但我认为它足够有趣,值得回答。请记住,C++最初只是"带有类的C",今天仍然可以编写基本上是C的代码,而无需使用C++给你的任何很好的抽象。例如,如果您不想要使用异常的成本,请不要使用它们,如果您不想要 RTTI(虚拟函数)的成本,请不要使用它们,如果您不想要使用模板的开销......等。
至于资源,我将打破规则并推荐游戏编程模式,尽管名称是编写高性能C++的良好通用指南。
我怎样才能更好地学会"不为不使用的东西付费"?
"不为不使用的东西付费"的关键是抽象。当您清楚地了解类或函数的用途时,您可以添加类和函数正常工作绝对必要的数据和参数,同时尽可能减少开销。
您必须非常警惕地向类中添加成员变量,成员函数(虚拟和非虚拟)。每个成员变量都会增加类的内存需求。每个成员函数都需要维护。虚拟成员函数的存在增加了类的内存需求,并且在运行时会受到很小的损失。
你必须对函数的参数非常警惕。您不希望用户承担提供没有意义的参数的负担。你也不想通过做出隐藏的假设来遗漏任何论点。
- 通过unordered_map的键实现"did you mean"
- "Include What You Use"
- 这是什么意思:"member reference type 'Human *' is a pointer; did you mean to use '->'?"
- 链接时,"grab what you need" 和 "grab all" 之间是否有某些内容(-wl,--whole-archive)?
- strtok don't return nullptr
- 为什么我会得到"You must feed a value for placeholder tensor 'output' with dtype int64"?
- 如果您属于"we don't use exceptions"阵营,那么您如何使用标准库?
- 如何更好地学习"not pay for what you don't use"?
- qt: QInputDialog::getText don't work
- Windows libs for ffmpeg don't link (visual studio)?
- 预处理器:"The definition also permits you to split an identifier at any position and get exactly two tok
- 为什么OpenSSL给我一个"called a function you should not call"错误?
- 用于构建提升的'stage'参数:"don't know how to make <e>stage"
- FastDelegate 和 lambda - 无法让它们工作(Don Clugston 最快的可能代表)
- (Qt)可编辑的Q组合框:don't在输入文本时关闭弹出窗口
- 如何解决错误:"Missing required Boost components >= vX.XX, please install/upgrade Boost or configure you
- 可以'Don’我没让windberg认出我的分机
- 多集键中的"Don't Care"字段
- 按相反顺序排序。 "Don't repeat yourself"规则
- '(maybe you meant to use ‘->’ ?)' 在 gmock 测试中