起初我想尝试是否允许这样做:
vector<int> a{1, 2};
vector<int> b{3, 4};
for(auto ai : a, auto bi : b)
{
}
这没有用,但由于尺寸限制,我期待它。
但是,我很惊讶这也不起作用:
vector<int> b{3, 4};
for(int x = 1, auto bi : b)
{
}
逗号运算符不是要在转到右侧之前解决其左侧的所有副作用吗?
起初我想尝试是否允许这样做:
vector<int> a{1, 2};
vector<int> b{3, 4};
for(auto ai : a, auto bi : b)
{
}
这没有用,但由于尺寸限制,我期待它。
但是,我很惊讶这也不起作用:
vector<int> b{3, 4};
for(int x = 1, auto bi : b)
{
}
逗号运算符不是要在转到右侧之前解决其左侧的所有副作用吗?
在第二种情况下,您有一个声明。声明可以包含多个变量的声明,以逗号分隔。
您在第二种情况下写的内容等同于以下声明
int x = 1, auto bi;
for (...) ...
第一个不起作用的原因不是因为任何大小限制,而是因为范围for
循环的语法根本不允许你做这样的事情。
逗号运算符是运算符。这意味着它只能用于表达式。int x = 1, auto bi : b
绝对不是表情。所以你不能在那里真正使用它。
它看起来有点像格式错误的声明。格式错误,因为您试图更改声明的类型。
请注意,该语言的语法实际上对:
. 最终解决为单个声明。因此,在基于范围的 for 循环中声明多个变量是非法的。