2

起初我想尝试是否允许这样做:

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

}

逗号运算符不是要在转到右侧之前解决其左侧的所有副作用吗?

4

2 回答 2

4

在第二种情况下,您有一个声明。声明可以包含多个变量的声明,以逗号分隔

您在第二种情况下写的内容等同于以下声明

int x = 1, auto bi;

for (...) ...

第一个不起作用的原因不是因为任何大小限制,而是因为范围for循环的语法根本不允许你做这样的事情。

于 2013-11-19T11:10:21.923 回答
2

逗号运算符是运算符。这意味着它只能用于表达式。int x = 1, auto bi : b绝对不是表情。所以你不能在那里真正使用它。

它看起来有点像格式错误的声明。格式错误,因为您试图更改声明的类型。

请注意,该语言的语法实际上:. 最终解决为单个声明。因此,在基于范围的 for 循环中声明多个变量是非法的。

于 2013-11-19T11:13:14.833 回答