我想在for
循环中声明几个变量:
for ( int x = 0, int y = 0 ; ; )
{
}
,但这不起作用,因为我无法在逗号,
之后指定类型。在这种情况下,删除第二个int
或在循环外声明y
将解决问题,但是如果我想在循环内声明两个变量并且还有不同的类型呢?
我可以拥有类似的内容:
for ( int x = 0, float y = 0 ; ; )
{
}
?
答案 0 :(得分:8)
这是不可能的; C ++语法不会承认它。你可以得到的最接近的是在循环周围增加一个范围:
{
int x;
float y;
for (x=0, y=0;;) {
}
}
答案 1 :(得分:5)
不,你只能在那里声明一种类型的变量。您可以做的是使用std::pair
,std::touple
或类似的构造解决此问题:
for(std::pair<int, float> p = std::make_pair(0, 0.0f);; )
{
p.first++;
p.second *= 0.5f;
}
答案 2 :(得分:2)
C ++允许你这样做:
for( struct {int x; float y;} s; s.x<10; s.x++,s.y*=2.0f) {
}
MSVC有一个错误,它不允许这样做,但更多符合标准的编译器允许它。
答案 3 :(得分:0)
不,这是不可能的,它们都必须属于同一类型。
答案 4 :(得分:0)
你不能。
我的建议是将代码内部拆分为单独的函数以保持其可读性:
template<typename O, typename I>
O copy(I in, I end, O out) {
for(; in != end; ++in, ++out)
*out = *in;
return out;
}
IMO,这比发明新作用域或延长迭代器的生命周期要好得多,而且它会让你考虑代码是否可以通用化。