在临时范围上基于范围的for循环中,Barry提到以下内容不受被破坏的临时对象的影响,我测试的成员v确实存在于for循环的整个循环中(因为在for循环的整个循环中没有调用析构函数X)。解释是什么?
struct X {
std::vector<int> v;
~X()
{
}
};
X foo()
{
return X();
}
for (auto e : foo().v) {
// ok!
}
这是一种模糊的临时寿命延长形式。通常,您必须将临时文件直接绑定到引用才能使其工作(例如,for(auto x:foo())),但根据cppreference,这种效果通过以下方式传播:
()
(分组,不是函数调用),[]
,。
,。*
,?:
,
。即。如果a. b
绑定到引用,则a
的生命周期会延长。
由于valgrind中出现了一些分段错误和警告,我发现这段代码不正确,并且在for range循环中有一些悬而未决的引用。 看起来好像开始和结束是从一个临时循环中提取的,并且在循环中丢失了。 当然,一种方法是 然而,我想知道为什么for(auto e:f()[5])是一个错误,以及是否有更好的方法或某种方法来设计f,甚至容器(
对于我的项目,我需要使循环中的迭代器转到容器中的下一项,执行一些操作,然后再次返回到同一迭代器,然后继续,然而,由于某种原因,和,然后使用似乎都不起作用。那么,我怎样才能得到下一个迭代器,然后返回到上一个迭代器呢? 我收到以下错误消息: 非常感谢。
考虑基于范围的for循环的begin expr和end expr的规范(N4140[标准范围]/p1)。给定类型为RangeT的范围, 开始表达式和结束表达式的确定如下: 如果“范围”是数组类型,则“开始表达式”和“结束表达式”分别是“范围”和“范围绑定”,其中“范围绑定”是数组绑定。如果RangeT是大小未知的数组或类型不完整的数组,则程序格式错误 如果RangeT是类类型,则在类RangeT的
我对C很陌生,现在就在做中学习。在课堂材料中,我有以下功能: 几分钟前,我像这样使用了普通for循环:
我在实验基于范围的for循环时发现,如果你使用基于范围的for循环来循环一个向量,它会出现超出范围的错误,如果你使用基于范围的for循环,有没有办法避免这个错误 它会显示此错误
这是从2011年开始对这个问题的扩展:基于范围的for loops和ADL 使用Visual Studio 2015,我无法使用参数依赖查找(ADL)为自定义容器创建基于范围的for循环。 我在下面用一个自定义容器做了一个非常简单的测试用例: 使用此容器和ADL,以下测试可以很好地编译: 这是应该的。我不确定ADL是否在这里得到了利用,但无论如何,它是有意义的。根据MSDN文档,我们有: 请记住以