问题标签 [ranged-loops]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
322 浏览

c++ - ranged for 变量循环导致返回局部变量的地址引用?

使用上面的代码,据我所知,它似乎是有效的 C++。相反,当被调用时,我得到垃圾输出。

g++最初不会抱怨,但 Address Sanitizer抱怨。g++最后在添加时抱怨-O2。生成的警告是

请注意,我正在使用:

请注意,我通过使用指针解决了该错误。

但是,这确实在我心中留下了一些问题:

  1. 为什么在添加之前g++ 抱怨问题-O2
  2. 我的代码到底是什么未定义?我会说它是明确定义的:B::operator() const是......好吧...... const。这应该意味着它内部使用的对象要么是本地人,要么是 const 成员。它访问 const 成员。它构造了一个局部变量const auto &……应该引用一个 const 成员字段。究竟是什么导致它绑定到临时的呢?
0 投票
1 回答
172 浏览

c++ - C ++ 11的自动和范围for循环不起作用

我试图auto &在 ranged for 循环中使用来修改值。但我很震惊,它“一直”都不起作用。我在下面附上我的原始代码。它只是在矩阵中找到元素 0,并将相应的行和列设置为全零。

我正在使用 Mac OS 10.12.2 和 Apple LLVM 版本 8.0.0 (clang-800.0.42.1) 编译器。这是我的结果: 我的命令行输出

您可以看到它第一次没有工作,保持矩阵不变。第二次成功了。我也试过auto &&了,它给了我同样的“不确定”行为。但是带有直接索引的 for 循环一直都在工作(在代码中注释掉了)。目前,我无法在任何其他情况下复制该问题,但是这里的逻辑已经足够简单了。

会不会是编译器问题?任何人都可以运行代码并查看是否可以复制问题吗?

0 投票
2 回答
561 浏览

c++ - 基于范围的循环中的常量引用不起作用

我认为您可以在 C++11 的基于范围的循环中使用 const 引用,但是当我使用 g++ 编译此代码时:

我收到此错误:

但是当我const从基于范围的 for 循环中删除时,它工作得很好。为什么我的代码不能用 const 引用编译好?

0 投票
0 回答
34 浏览

c++ - 在自定义散列集中实现范围循环:仅访问未标记为空的条目

容器基本设置

我已经实现了一个简单的自定义无序集容器,它使用散列。在内部,它存储如下数据:

也就是说,它存储了两个数组。一个data使用模板化类型的实际值T调用,另一个emptyList使用bool标记该位置的集合是否被视为空的值调用。

这样,线性探测以存储新值并擦除条目变得更便宜。两者都分别成为寻找下一个emptyList[index] = true或将其设置为 的问题true

范围 for 循环的问题

for(auto i : set_instance)目前,我允许通过在集合类中具有以下公共成员函数来迭代存储在集合中的值:

当然,问题在于范围 for 循环也访问data不应访问的条目,因为它们被标记emptyList为空。

有没有办法让我这样做,以便当用户尝试使用范围循环迭代集合时,只有其中的条目data对应于emptyList未标记为实际由范围循环访问/处理的条目?true

0 投票
2 回答
73 浏览

c++ - 每个循环中的语句是否每次迭代都执行?

我有一个返回容器的函数。我们就叫它' Container'吧。

此函数将生成一个容器,其中包含每次调用都不同的随机元素。

当我使用 for each 循环遍历这个容器时,如下所示:

它会在每次迭代中生成一个新Container的,还是在进入 for each 循环时只生成一个?

0 投票
2 回答
528 浏览

c++ - C++11 迭代器和返回的 std::unique_ptr 的范围

问题

据我了解,当 astd::unique_ptr从函数返回到右值时,它的生命周期应该包含使用该右值的语句。但是使用 gcc 6.4.1 编译时,在 function 中的 C++11 foreach 语句开始Foo::iterator()之前, from 的返回值超出了范围。如下面的输出所示,析构函数在包含表达式被求值后被调用。这是 gcc 中的错误,还是糟糕的编程习惯?crashing_version()

用例

这种模式的目标是在不暴露私有向量的情况下使迭代可用。这似乎需要一些对象,Foo::Iterator因为有两个单独的列表要迭代。

程序输出:

0 投票
2 回答
3875 浏览

c++ - 错误:将“const double”绑定到“double&”类型的引用会丢弃限定符

我收到错误

将“const double”绑定到“double&”类型的引用会丢弃限定符

编译时:

虽然网上还有其他关于这个错误的问题,但我正在寻找这个特定代码的解决方案。我坚持使用ranged for。

0 投票
1 回答
2149 浏览

c++ - 使用 auto 遍历指针的 const 向量

假设我有以下指针的 const 向量:

我想遍历它,只在这个向量的一个元素上调用一个方法。这样做是否正确:

与使用有什么区别:

和 :

0 投票
0 回答
189 浏览

c++ - `c++17` 范围为 std::vectors 上的循环,带有值和索引

如何c++17在 std::vectors 上的范围 for 循环中访问值和索引?

我的代码失败

g++ -std=c++17 main.cpp -lstdc++

版本:

gcc 版本 7.1.0 (Ubuntu 7.1.0-10ubuntu1~16.04.york0)

0 投票
1 回答
256 浏览

c++ - C ++通过范围for循环将整数输入向量;随机 0

我正在使用范围 for 循环将随机值输入到向量中。但是,当我输出向量的值时,会有一组尾随零。我不知道他们是从哪里来的。

输出给了我:

我必须使用范围 for 循环。我一直对那些额外的零在 array3 中做了什么感到困惑。我将向量的大小设置为十,但使用 .size() 显示大小实际上是 20。为什么向量在我的随机值前面放了十个零?