【问题标题】:What does it mean when the first "for" parameter is blank?第一个“for”参数为空时是什么意思?
【发布时间】:2009-12-28 20:12:19
【问题描述】:

我一直在查看一些代码,并且看到了几个示例,其中省略了 for 循环的第一个元素。

一个例子:

for ( ; hole*2 <= currentSize; hole = child)

这是什么意思?

谢谢。

【问题讨论】:

    标签: c++ syntax for-loop


    【解决方案1】:

    这只是意味着用户选择不将变量设置为自己的起始值。

    for(int i = 0; i < x; i++)
    

    相当于...

    int i = 0;
    for( ; i < x; i++)
    

    编辑(回应 cmets):这些并不完全等同。变量 i 的作用域不同。

    有时后者用于分解代码。如果您的索引变量在 for 循环本身中被修改,您也可以删除第三条语句...

    int i = 0;
    for(; i < x;)
    {
    ...
    i++
    ...
    }
    

    如果你放弃第二条语句,那么你就有一个无限循环。

    for(;;)
    {
    runs indefinitely
    }
    

    【讨论】:

    • 在 for 循环预初始化中声明 i 并不完全 等同于在循环之前声明它。在前一种情况下,它的作用域是 for 语句的主体——也就是说,在 for 语句的主体关闭后,您将无法访问它。在后一种情况下,变量 i 在 for 循环体之后仍然可以访问。
    • 虽然您可以使用for(;i&lt;x;),但在风格上最好使用更简单且更易于阅读的while(i&lt;x)
    • 其实这些并不等同。在 for 关键字中声明时,“i”仅针对该范围声明。
    • 我也喜欢使用更简单的代码。此外,它应该尽可能 Redditable。 :)
    • @lsrawat 你可能应该问一个新问题,但它是int i = 0, j = arrSize - 1 而不是int i = 0, int j = arrSize - 1
    【解决方案2】:

    for 构造基本上是( pre-loop initialisation; loop termination test; end of loop iteration),所以这只是意味着在这个 for 循环中没有任何初始化。

    您可以重构任何for 循环:

    pre-loop initialisation
    while (loop termination test) {
    ...
    end of loop iteration
    }
    

    【讨论】:

      【解决方案3】:

      这意味着hole的初始值是在我们进入循环之前设置的

      【讨论】:

        【解决方案4】:

        有些人弄错了,所以我只是想澄清一下。

        int i = 0;
        for (; i < 10; i++)
        

        不一样
        for (int i = 0; i < 10; i++)
        

        在 for 关键字中声明的变量仅在该范围内有效。

        简单地说。

        有效(“i”在循环范围之外声明)

        int i = 0;
        for (; i < 10; i++)
        {
          //Code
        }
        std::cout << i;
        

        InValid(“i”在循环范围之外不存在)

        for (int i = 0; i < 10; i++)
        {
          //Code
        }
        std::cout << i;
        

        【讨论】:

          【解决方案5】:

          这意味着循环控制变量在 for 循环之前被初始化。

          For C  code,
          
          int i=0;
          for( ; i <10 ; i++) { } //since it does not allow variable declaration in loop 
          
          For C++  code,
          
          for(int i=0 ; i <10 ; i++) { }  
          

          【讨论】:

          • C99 允许您使用“C++”形式,因此不再需要在 for 语句之外声明变量。但是,在 C 和 C++ 中,在 for 语句中声明的变量在该语句之后超出范围。如果要在 for 语句完成后使用变量,则需要 for(;i
          【解决方案6】:

          您可以省略 for 循环的任何参数。 即:for(;;) {} 与 while(true) {}

          大致相同

          【讨论】:

            【解决方案7】:

            这意味着hole的初始值是在我们进入循环之前设置的。

            看起来像是某种列表遍历。

            【讨论】:

              【解决方案8】:

              假设你想

              for (hole=1 ; hole*2 <= currentSize; hole = child)
              

              但是for循环之前hole的值已经是1了,那么你可以把这个循环的初始化部分滑掉:

              /* value of hole now is 1.*/
              for ( ; hole*2 <= currentSize; hole = child)
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2016-10-05
                • 2011-10-22
                • 1970-01-01
                • 2020-04-29
                • 1970-01-01
                • 1970-01-01
                • 2014-02-18
                • 1970-01-01
                相关资源
                最近更新 更多