在基于范围的for循环中定义引用
Define a reference in a range-based for loop
我对C++完全陌生,所以这个问题可能有点天真:D!最近,我被一个与基于的申报范围有关的问题弄糊涂了。我们可以写这样的东西:
for(int &i : vec)
然后发生了一场混乱。在我看来,变量i将被定义一次,并在每个循环中分配给不同的值。但在上面的情况下,i是一个引用,它只是一个别名,应该只绑定到一个对象。我认为解决这一问题的一种方法是认为每次都会定义一个新的I。我搜索了关于这一点的进一步解释,发现了一个页面:range for!:
语法属性(可选)
for ( range_declaration : range_expression ) loop_statement
解释
上面的语法生成类似于以下的代码(__range、__begin和__end仅用于说明):
auto && __range = range_expression ;
for (auto __begin = begin_expr,
__end = end_expr;
__begin != __end; ++__begin) {
range_declaration = *__begin;
loop_statement
}
"range_declaration"是在for循环中定义的。但是,循环中定义的变量是否被重用,这意味着第一个例子中定义的引用i被重用?尽管如此,我还是很困惑,谁能给我一些提示吗。谢谢
在循环体内部定义的变量是循环体的局部变量,因此在每次循环迭代时都会被销毁并重新定义。所以int &i
在每次迭代中都是新初始化的,没有问题。
如果我们从替换(经过一些简化)到您发布的示例中,可能会更清楚:
for (auto b = begin(vec), e = end(vec); b != e; ++b) {
int &i = *b;
//loop statement
}
相关文章:
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么我的for循环不能正确获取argv
- 在基于范围的for循环中使用结构化绑定声明
- 通过for循环使用用户输入填充列表
- 使用for循环检查数组中的重复项
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 正在使用for循环创建QScatterSerie
- Python中的for循环与C++有何不同
- 在更改for循环的第三部分后,未使用for循环结果
- 在 for 循环中查找问题时遇到困难
- 嵌套for循环C++的问题(初学者)
- 如何用for循环在c++中生成单词三角形
- 如何在for循环中包含两个索引值的测试条件
- 带有多个独立参数的C++For循环
- C++ Python 循环"for i, num in enumerate(list):"版本
- C 多循环 for () 基础知识
- 没有条件值的 FOR 循环"for (int i = 1; ; i++)"无法正常工作
- 为用户提供循环for循环的选项
- 打破循环for循环