我可以在for循环的init-expression中使用不同的类型吗?

时间:2013-04-03 18:27:35

标签: c++ loops types for-loop c++11

以下代码无法编译:

#include <iostream>

int main(){

    for (int i = 0, double j = 0; i < 10; ++i, j+=.1){
        std::cout << i << " " << j << '\n';
    }

    return 0;
}

是否可以初始化两种不同的类型,或者我是否需要创建结构/对/等?

5 个答案:

答案 0 :(得分:8)

没有。

但你可以在那里定义一个匿名结构:

for (struct { int i; double j; } x = {0,0};  x.i < 10; ++x.i, x.j+=.1)
{
    std::cout << x.i << " " << x.j << '\n';
}

参见初始化部分:

struct { int i; double j; } x = {0,0};

它定义了一个匿名结构,然后创建一个对象x并使用{0,0}初始化它,用i初始化成员j0。< / p>

答案 1 :(得分:2)

不可能,但有办法:

double var1;
int var2;
for (var2 = 0,var1 = 0.0; var2 < 12; var2++){}

如果你想限制f和i的范围,那么将它们包含在{}中,就像

一样
{
    double var1;
    int var2;
    for (var2 = 0,var1 = 0.0; var2 < 12; var2++){}
}

答案 2 :(得分:1)

不,你不能。您可以拥有多个变量,但它们必须是相同的类型。

答案 3 :(得分:0)

它们必须是相同的类型,但您可以使用结构来绕过它。

for (struct {int j; char i;} loop = {0, 'e'}; loop.i < 33; ++loop.j, ++loop.i)
{
    std::cout << loop.i << '\n';
}

答案 4 :(得分:0)

可以执行以下操作

#include<cstdlib>
#include<iostream>

int main(int argc, char *argv[]){

    int i; double j;
    for(i = 0, j = 0; i < 10; ++i, j+= .1){
        std::cout << i << " " << j << '\n';
    }


    return EXIT_SUCCESS;
}