代码之家  ›  专栏  ›  技术社区  ›  tuergeist

本地变量的声明和初始化——C++是什么样的?

  •  0
  • tuergeist  · 技术社区  · 14 年前

    我没有找到任何合适的问题回答,所以我想知道什么是“更好”的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 回复  |  直到 14 年前
        1
  •  4
  •   unwind    14 年前

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

    我认为最常见的风格是尽可能地声明变量接近它的第一次使用,但是和风格的所有问题一样,它可以非常主观地表示什么是“最好的”。

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

    延迟声明的一个优点是,对于这样的情况,如果读取的值在正文的其余部分没有修改,则可以 const 这有助于清晰易读。自从A 康斯特 变量在声明后不能赋值给,这只适用于前一种样式。

        2
  •  1
  •   SysAdmin    14 年前

    最好将变量的范围限制在访问它的位置。在本例中是while循环。

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

        3
  •  1
  •   Michael Aaron Safyan    14 年前

    在性能方面没有区别,但是imho是首选的,前者(在使用varaible的范围内声明,在声明变量时使用初始值设定项)。

    声明最接近将要使用的变量的优点是:

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