在函数后期初始化变量的好处是什么?而不是在函数体的开头?

Har*_*ker 2 c++ variables

我一直在阅读Bjarne Stroustrup写的一本优秀的书,他建议你尽可能晚地声明变量,最好在你使用它之前,但是它没有提到任何好处而不是在函数体的开头迟到声明变量.

那么像这样延迟声明变量有什么好处:

int main()
{
  /* some
     code
     here
  */
  int MyVariable1;
  int MyVariable2;
  std::cin >> MyVariable1 >> MyVariable2;
  return(0);
}
Run Code Online (Sandbox Code Playgroud)

而不是像这样的函数体的开头:

int main()
{
  int MyVariable1;
  int MyVariable2;
  /* some 
     code
     here
  */
  std::cin >> MyVariable1 >> MyVariable2;
  return (0);
}
Run Code Online (Sandbox Code Playgroud)

vso*_*tco 5

它使代码更容易遵循.通常,您在需要时声明变量,例如,当您想通过该循环找到最小值的某个循环时.通过这种方式,当有人读取您的代码时,他不必尝试破译函数开头时25个变量的含义,但变量将在通过代码时"解释"自己.毕竟,了解变量的含义并不重要,但要了解代码的作用.

请记住,大多数情况下,在代码的一小部分中使用该局部变量,因此在需要它的那个小部分中定义它是有意义的.


Dav*_*aim 5

想到几点

  1. 并非所有对象都是默认的 - 可构造的,因此很多时候在函数开头声明对象不是一个选项,只在赋值时(又称auto myObj = creationalfunction();)
  2. 你的函数获得的行数较少,因此更具可读性.在整个代码中,在函数开头声明每个变量确实使它变得更大一些.
  3. 如果你的函数抛出 - 构建一个对象列表是不经济的,只是在堆栈展开时销毁它们
  4. 在它们被分配的同一行中声明变量可以让你使用auto,这使得代码时间更加灵活.
  5. 现在这是C++的常见惯例,这非常重要.
  6. 创建一个对象+稍后分配它可能比用一个值直接初始化一个对象更慢.