是否应该敏锐而有意识地尝试尽可能推迟变量定义?

Alo*_*ave 5 c++ performance

在他的书中Effective C++ Scott Meyers提出了一个有趣的指导方针,

第26项:尽可能推迟变量定义.它提高了程序清晰度并提高了程序效率.

他提出的支持上述论点的论点是,无论何时创建或破坏变量,我们都会为变量的构造和破坏承担一些成本.
我们可能有多个控制流,其中我们可以从函数返回而不使用早期定义的变量(在函数的开头),因此可能不必要地产生未使用变量的创建成本.

这一切似乎都是合乎逻辑的,而且确实是一种很好的做法.来自c背景我倾向于在功能块的开头声明我的所有变量.也许它仅仅是c背景,但我也觉得在函数中的一个地方的所有声明都提供了简单和更好的可读性.

所以问题是你们当中有多少人在日常节目中真正遵循这样的做法,或者试图遵循这样的做法仅仅是一种过度杀伤力.

sbi*_*sbi 8

Scott Meyers的建议(像往常一样)非常好,你应该遵循它.我现在已经这样做了二十年了,我不喜欢Java采取C方式这样做的事实.

  • @Als:我认为它"更习惯于"而不是"更具可读性".我想你会同意我的看法,从理论上讲,阅读一个变量定义,说"只要记住我一会儿,我会回来"实际上比阅读正确使用的定义更不可读远.正如我在我的回答中所说,在你习惯了这个之后,你会惊讶于这简化了代码的阅读 (3认同)

Joh*_*ohn 5

即使在现代C中,您也应该推迟声明,直到您可以使用合理的值进行初始化.斯科特是老师,我们只是追随者......

  • @Als:用C99或更高版本编写的任何内容. (2认同)

dav*_*vka 5

我当然这样做.它确实需要一些适应新习惯(来自其他语言我自己知道你的意思),但一旦你在那里,它会更方便.除了你提到的内容之外,我还看到了两个好处:

  1. 提高可读性:您需要更少的"缓存"来记住功能范围中使用的变量.每个小的代码和平都定义了自己的变量.

  2. 初始化:一个非常重要的原则是应尽可能定义变量的初始化.在函数开头并不总是可以知道初始化值