iteration-statement:
while ( condition ) statement
do statement while ( expression ) ;
for ( init-statement conditionopt ; expressionopt ) statement
for ( init-statementopt for-range-declaration : for-range-initializer ) statement
for-range-declaration:
attribute-specifier-seqopt decl-specifier-seq declarator
attribute-specifier-seqopt decl-specifier-seq ref-qualifieropt [ identifier-list ]
for-range-initializer:
expr-or-braced-init-list
上面的语法由 C++ISO 给出。我见过大量使用 for-range 语句的经典方法的示例:
#include <iostream>
using namespace std;
int main() {
int a[5] = { 1,2,3,4,5 };
for (int i : a) { cout << i << endl; }
}
但我没有找到如何使用for-range-declaration
作为attribute-specifier-seqopt decl-specifier-seq ref-qualifieropt [identifier-list]
。在这种情况下它是如何工作的?能举个例子吗?
最佳答案
这部分语法
attribute-specifier-seqopt decl-specifier-seq ref-qualifieropt [ identifier-list ]
是为了允许循环中的结构化绑定(bind)。例如你可以这样做:
struct S { int i,j; };
std::vector<S> v;
for (auto [a, b] : v)
// ... a and b simply refer to i and j
请注意,identifier-list
指示名称 a
和 b
仅引用结构体的成员。
关于c++ - 如何在C++中正确使用for-range语句语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69226393/