声明和初始化局部变量 - 大多数C ++是什么样的?

时间:2010-04-09 06:58:02

标签: c++ variables initialization declaration

我还没有找到任何合适的问题,所以我想知道在性能和/或内存方面什么是“更好”的C ++风格。

两个代码都在方法内。问题是:何时宣布long prio?有什么影响?

代码1

while (!myfile.eof())
{
   getline(myfile, line);
   long prio = strtol(line); // prio is declared here
   // put prio in map...
   // some other things
}

代码2

long prio; // prio is declared here
while (!myfile.eof())
{
   getline(myfile, line);
   prio = strtol(line); 
   // put prio in map...
   // some other things
}

3 个答案:

答案 0 :(得分:4)

在这种情况下,性能没有差异。如果比较生成的代码,两种情况很可能相同。

我认为最常见的风格是将变量声明为尽可能接近其首次使用,但与所有风格问题一样,它可以是非常主观的“最佳”。

正如其他人所提到的,如果可能的话,最好将每个变量限制在尽可能紧的范围内。这样做可以降低变量在错误的上下文中使用,被错误覆盖等的风险。它还减少了您需要读取的代码量,以便找出变量的使用位置,这有助于理解代码。

延迟声明的一个优点是,对于像这样的情况,读取的值在身体的其余部分没有被修改,可以使const有助于清晰度和可读性。由于const变量在声明后无法分配,因此仅适用于前一种风格。

答案 1 :(得分:1)

最好将变量的范围限制为访问它的位置。在这种情况下,它是while循环。

如果你担心每次循环运行时是否会声明prio - :) - 我可以向你保证不会出现这种情况(声明不是运行时代码的一部分)。这没有性能开销。

答案 2 :(得分:1)

在性能方面没有区别,但是恕我直言,前者(在使用变容器的范围内声明,并且在变量的声明中使用初始化器)是优选的。

声明最接近使用位置的变量的优点是:

  • 不再需要时,它们会超出范围,这意味着:     
              
    • 如果不使用它们,将不会被错误地访问,并且:
    •         
    • 不再使用它们时会被破坏(如果它是带有析构函数的用户定义类型)
    •     
  • 声明在使用它附近的代码中可见,使其更具可读性
  • 在声明中使用初始化程序无疑会在使用前初始化