为什么 c++ 不支持 for 循环中的多个初始值设定项

Why c++ does not support multiple initializers in for loop?

本文关键字:不支持 c++ for 循环 为什么      更新时间:2023-10-16

可能的重复项:
C++为什么我不能像这样写一个 for() 循环:for( int i = 1,双 i2 = 0;
为什么用 2 个循环变量在 C++ 中编写一个 for 循环如此"困难"?

#include <iostream>
using namespace std;
int main()
{
    for (int i = 0, double j = 3.0; i < 10; i++, j+=0.1)
        cout << i << j << endl;
    return 0;
}

不编译,因为 for 循环初始值设定项块中有两个声明。

但是为什么?

如果你想在初始化中intdouble两者,那么一种方法是定义一个匿名结构!是的,您也可以在for循环中定义struct。这似乎是C++的一个鲜为人知的特征:

#include <iostream>
int main()
{
    for( struct {int i; double j;} v = {0, 3.0}; v.i < 10; v.i++, v.j+=0.1)
       std::cout << v.i << "," << v.j << std::endl; 
}

输出:

0,3
1,3.1
2,3.2
3,3.3
4,3.4
5,3.5
6,3.6
7,3.7
8,3.8
9,3.9

在线演示 : http://ideone.com/6hvmq

在C++语法中,不同的数据类型用; 如果不是函数)分隔。在循环for,一旦找到;,含义就会改变。即

for (<initializations>; <condition>; <next operation>)

其他原因可能是为了避免在已经复杂的语法中出现复杂性,此功能是不允许的。

如果要在循环作用域for声明变量,则始终可以模拟这种情况:

int main()
{
  {
    double j = 3.0;
    for (int i = 0; i < 10; i++, j+=0.1)
        cout << i << j << endl;
  }
    return 0;
}

因为语法已经被采用。在变量声明/定义中,用逗号分隔会添加相同类型的新变量,而不是不同类型的新变量。该语法在for循环中可用:

for ( std::vector<int>::const_iterator it = v.begin(), end = v.end();
      it != end; ++it ) {
   // do something here
}