逗号运算符与c ++ 11 for循环

时间:2013-11-19 11:08:35

标签: c++ c++11 for-loop foreach comma-operator

我首先想要尝试是否允许执行以下操作:

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

}

逗号运算符是否意味着在进入右侧之前解决其左侧的每个副作用?

2 个答案:

答案 0 :(得分:4)

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

您在第二种情况下所写的内容相当于以下声明

int x = 1, auto bi;

for (...) ...

第一个不起作用的原因不是因为任何大小限制,而是因为range for loop的语法只是不允许你这样做。

答案 1 :(得分:2)

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

看起来有点像畸形声明。格式错误,因为您正在尝试更改声明的类型。

请注意,该语言的语法实际上对:左侧的作品使用特殊的非终结 for-range-declaration 。最终解析为单一声明。因此,在基于范围的for循环中声明多个变量是违法的。

相关问题