我可以在for循环的初始表达式中有不同的类型吗?

Can I have different types in the init-expression of a for loop?

本文关键字:类型 表达式 for 循环 我可以      更新时间:2023-10-16

以下代码将无法编译:

#include <iostream>
int main(){
    for (int i = 0, double j = 0; i < 10; ++i, j+=.1){
        std::cout << i << " " << j << 'n';
    }
    return 0;
}

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

No。

但是你可以在这里定义一个匿名结构体:

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}初始化它,用0初始化成员ij

不可能,但有办法:

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++){}
}

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

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

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

可以做以下操作

#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;
}
相关文章: