jjzjj

c++ - Ranged for loop const 引用似乎没有什么区别

如果我在C++11中有一个基于范围的for循环,for(autoconst&ticket:ticketStrip->tickets()){ticket->ClearCalled();}为什么我可以在循环内调用票证上的非const方法,例如未标记为const的ClearCalled()?voidTicket::ClearCalled(){...}ClearCalled确实修改了票证内部结构,因此不应将其标记为常量。我知道我应该使用auto&ticket不过我试过了autoconst&ticket并且编译器接受了它。票的类型是boost::shared_ptr并放入一些新代码:ticket

c++ - for_each 和 ranged base for on 2D array

我尝试使用for_each和基于范围的for循环打印二维数组。我的程序是这样的:-#include#includeusingnamespacestd;intmain(){inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};//for_each(begin(a),end(a),[](intx){cout为什么我的第一个for_each会抛出错误,为什么行需要&符号?它的类型是什么?row是指针吗? 最佳答案 for_each(begin(a),end(a),[](intx){coutbegin(a)产生一个int

c++ - 我什么时候应该使用新的 ranged-for,我可以将它与新的 cbegin/cend 结合使用吗?

当然,C++11中新的ranged-for将非常简洁和有用。据我了解它是如何工作的,它通过尝试*Argument-Depending-Lookup"(ADT)。但另一个补充是,所有容器现在都有cbegin()和cend()来获取const_iterators。我有点困惑,一方面我想我应该使用cbegin()如果我做not想要修改容器,另一方面我必须在ranged-for中添加一个额外的const才能获得相同的结果。所以,它看起来像这样://printallfor(constautoelem:data)cout使用ADT,找到data.begin(),因此需要const。对//print

c++ - 什么是 "terse ranged-based for loops"?

clang已开始实现terseranged-basedforloops来自n3994.通常在引入基于范围的for循环时,我们会看到for(auto&v:vector)形式的代码,以避免不必要的复制。似乎n3994建议for(auto&&v:vector)在各方面都优越。我有几个问题:后一种形式比前一种有什么优势?为什么我们通常使用auto&而不是auto&&如果后者显然是有利的?是否使新的基于范围的循环等效于auto&&会破坏现有代码?它会对新代码产生实际影响吗?这不会向初学者介绍他们的代码实际上等同于auto&&的问题吗? 最佳答案

c++ - 为什么编译器不对集合的元素优化一个空的 ranged-for 循环?

在测试我的代码时,我注意到无论是否删除空的ranged-for循环,执行时间都会显着增加。通常我会认为编译器会注意到for循环没有任何作用,因此会被忽略。作为编译器标志,我使用的是-O3(gcc5.4)。我还使用vector而不是集合对其进行了测试,这似乎在两种情况下都有效并且执行时间相同。似乎迭代器的增量花费了所有额外的时间。范围for循环仍然存在的第一种情况(慢):#include#includeintmain(){longresult;std::setresults;for(inti=2;i删除范围for循环的第二种情况(快速):#include#includeintmain()

c++ - 为什么编译器不对集合的元素优化一个空的 ranged-for 循环?

在测试我的代码时,我注意到无论是否删除空的ranged-for循环,执行时间都会显着增加。通常我会认为编译器会注意到for循环没有任何作用,因此会被忽略。作为编译器标志,我使用的是-O3(gcc5.4)。我还使用vector而不是集合对其进行了测试,这似乎在两种情况下都有效并且执行时间相同。似乎迭代器的增量花费了所有额外的时间。范围for循环仍然存在的第一种情况(慢):#include#includeintmain(){longresult;std::setresults;for(inti=2;i删除范围for循环的第二种情况(快速):#include#includeintmain()