是否有可能在c++的for循环的初始化体中声明两个不同类型的变量?
例如:
for(int i=0,j=0 ...
定义两个整数。我可以在初始化体中定义int和char吗?如何做到这一点呢?
是否有可能在c++的for循环的初始化体中声明两个不同类型的变量?
例如:
for(int i=0,j=0 ...
定义两个整数。我可以在初始化体中定义int和char吗?如何做到这一点呢?
当前回答
没有-但技术上有一个变通的方法(不是说我真的会使用它,除非被迫):
for(struct { int a; char b; } s = { 0, 'a' } ; s.a < 5 ; ++s.a)
{
std::cout << s.a << " " << s.b << std::endl;
}
其他回答
不可能,但你可以:
float f;
int i;
for (i = 0,f = 0.0; i < 5; i++)
{
//...
}
或者,使用额外的括号显式限制f和i的范围:
{
float f;
int i;
for (i = 0,f = 0.0; i < 5; i++)
{
//...
}
}
你不能在初始化时声明多个类型,但是你可以赋值给多个类型
{
int i;
char x;
for(i = 0, x = 'p'; ...){
...
}
}
只是在它们自己的范围内声明它们。
你也可以像下面这样在c++中使用。
int j=3;
int i=2;
for (; i<n && j<n ; j=j+2, i=i+2){
// your code
}
没有-但技术上有一个变通的方法(不是说我真的会使用它,除非被迫):
for(struct { int a; char b; } s = { 0, 'a' } ; s.a < 5 ; ++s.a)
{
std::cout << s.a << " " << s.b << std::endl;
}
参见“是否有方法在for循环中定义两种类型的变量?”了解另一种涉及嵌套多个for循环的方法。与Georg的“结构技巧”相比,另一种方法的优势在于:(1)允许你混合使用静态和非静态局部变量;(2)允许你使用不可复制的变量。缺点是可读性差得多,效率也可能较低。