本文介绍了什么是"for (const auto &s : strs) {} "意思是?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

for (const auto &s : strs) 是什么意思?冒号 : 的作用是什么?

What does for (const auto &s : strs) mean? What is the function of colon :?

vector<string> &strs;
for (const auto &s : strs){
   //
}

推荐答案

它实际上是一个 C++11 特性,称为基于范围的 for 循环".

It's actually a C++11 feature called "range-based for-loops".

在这种情况下,它基本上是一个更容易编写的替代品:

In this case, it's basically an easier-to-write replacement for:

// Let's assume this vector is not empty.
vector<string> strs;

const vector<string>::iterator end_it = strs.end();

for (vector<string>::iterator it = strs.begin(); it != end_it; ++it) {
  const string& s = *it;
  // Some code here...
}

:新语法的一部分.

在左侧,您基本上有一个变量声明,它将绑定到向量的元素,而在右侧,您有一个要迭代的变量(也称为范围表达式").

On the left you basically have a variable declaration that will be bound to the elements of the vector and one the right you have the variable to iterate on (also called "range expression").

以下是解释范围表达式的先决条件的链接文档的摘录:

Here is an excerpt of the linked documentation that explains the prerequisites for the range-expressions:

range_expression 被评估以确定要迭代的序列或范围.序列中的每个元素依次被取消引用并分配给具有 range_declaration 中给出的类型和名称的变量.

begin_expr 和 end_expr 定义如下:

begin_expr and end_expr are defined as follows:

如果__range是一个数组,则begin_expr是__range,end_expr是(__range + __bound),其中__bound是数组中元素的个数(如果数组大小未知或类型不完整,程序就出错了-形成)

If __range is an array, then begin_expr is __range and end_expr is (__range + __bound), where __bound is the number of elements in the array (if the array has unknown size or is of an incomplete type, the program is ill-formed)

如果 __range 的类型是具有 begin 或 end 成员函数之一或两者的类类型,则 begin_expr 是 __range.begin() 而 end_expr 是 __range.end();

If __range's type is a class type with either or both a begin or an end member function, then begin_expr is __range.begin() and end_expr is __range.end();

否则,begin_expr 是 begin(__range) 和 end_expr 是 end(__range),它们是通过参数依赖查找找到的,std 作为关联的命名空间.

Otherwise, begin_expr is begin(__range) and end_expr is end(__range), which are found via argument-dependent lookup with std as an associated namespace.

请注意,由于所有这些,基于范围的 for 循环也支持迭代 C 数组,因为 std::begin/std::end 也适用于这些数组.

Note that thanks to all this, range-based for loops also support iterating over C arrays as std::begin/std::end works with those too.

这篇关于什么是"for (const auto &amp;s : strs) {} &quot;意思是?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-22 21:53
查看更多