【问题标题】:Multiple Counter Problem In For LoopFor循环中的多个计数器问题
【发布时间】:2011-01-21 08:33:00
【问题描述】:

为什么这是无效的

for( int i = 0, int x = 0; some condition; ++i, ++x )

这是

int i, x;
for( i = 0, x = 0; some condition; ++i, ++x )

谢谢

【问题讨论】:

标签: c++ for-loop


【解决方案1】:

这行得通:

for( int i = 0, x = 0; some condition; ++i, ++x )

这是一个变量声明:

int i, j; // correct
int i, int j; // wrong, must not repeat type

【讨论】:

  • 感谢您修复我的问题中的拼写错误
【解决方案2】:

我实现了这种方法来计算对角线差。这里我在计算对角线的总和

 for(int i=0,j=n-1; i<n,j>=0;i++,j--){
    sum_right += a[i][j];
  }

【讨论】:

    【解决方案3】:

    当需要声明两个不同类型的变量时,一个声明是不行的

    Hackety hack:

    for (struct {int i; char c;} loop = {0, 'a'}; loop.i < 26; ++loop.i, ++loop.c)
    {
        std::cout << loop.c << '\n';
    }
    

    ;-)

    【讨论】:

    • 哇!以前从未听说过。
    • 这似乎是一个不错的技巧。你会评论一些奇怪的细节吗?如果我用 std::vector::const_iterator 之类的东西替换 i 变量的类型,它将无法编译......无论如何,在 for 循环中编写带有两个迭代器的长临时结构似乎是脏代码,但我只是渴望理解。
    【解决方案4】:

    这是合法的:

        for(int i = 0, x = 0; condition; ++i, ++x );
    

    int x, int y 不是合法的变量声明方式;

    【讨论】:

      【解决方案5】:

      为什么它应该是有效的?这是一个语法上毫无意义的contrust。你想表达什么?

      for 标头的第一部分是一个声明。

      int i = 0, int x = 0
      

      不是有效的声明。它不会在for 中编译,原因与它不会在程序的其他任何地方编译的原因相同

      int i = 0, int x = 0; // Syntax error
      

      当你需要在一个声明中声明两个int类型的对象时,你可以这样做

      int i = 0, x = 0; // OK
      

      for可以用同样的东西

      for( int i = 0, x = 0; some condition; ++i, ++x )  
      

      (但是当你需要声明两个不同类型的变量时,不能通过一个声明来完成,因此不能同时在for中声明两者。在其中至少一个必须在for 之前声明。)

      【讨论】:

        【解决方案6】:

        因为变量声明(如int x)不是表达式,而逗号运算符(,)只组合表达式。

        【讨论】:

        • 这暴露了 for 循环初始化块的一个可悲的限制。即在初始化块中初始化的所有变量必须是相同的类型。
        • 注意,int x, y; 声明中的 , 不是逗号运算符!
        【解决方案7】:

        正确的版本是

        for (int i = 0, x = 0; some condition; ++i, ++x)
        

        【讨论】:

          猜你喜欢
          • 2012-01-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多