Range-based for loop Range-based for loop 在范围上执行for循环。 用作更易读的,相当于传统的用于循环操作范围内的值,例如容器中的所有元素。 句法 attr(optional) for ( range_declaration : range_expression ) loop_statement attr - any number of attributes range_declaration - a declaration ...
4. auto __end = end_expr(__range); 5. for (;__begin != __end; ++__begin) { 6. range_declaration = *__begin; 7. loop_statement 8. } 9. } 1. 2. 3. 4. 5. 6. 7. 8. 9. 请注意,“等价于”并不表示编译器就是这么实现range-based for loops的。只是说两者的运行效果等价 ...
range-for是C++ 11新增特性,用于循环迭代一个“范围”,该“范围”类似于包含有begin()和end()方法的STL序列容器。所有的STL标准容器都适用于该“范围”,例如vector、string等等。数组也同样可以,只要定义了begin()和end()方法的任何“范围”都可以使用for来循环迭代容器里面的元素,如istream。 语法: for(range_de...
Range-Based for loop应该是一种语法糖,实际上编译器应该是当成普通的for循环来处理的。 从cppreference(https://en.cppreference.com/w/cpp/language/range-for)上可以得到印证。 Range-Based for loop的一般形式(省略了不相关的部分)实际上等价于下面的for循环: > `for ( item-declaration : range-initializer...
When used with a (non-const) object that has copy-on-write semantics, the range-basedforloop may trigger a deep copy by (implicitly) calling the non-constbegin()member function. If that is undesirable (for instance because the loop is not actually modifying the object), it can be avoided...
; for (auto &c : s) { /* ... */ } 直觉上c的类型应该是const char&,但是怎么推理得到c的类型呢?细究起来确实花了一番功夫。 使用auto声明的变量必须要给初始值,而这里的语法没有给初始值。Range-Based for loop应该是一种语法糖,实际上编译器应该是当成普通的for循环来处理的。 从cppreference(...
C++11 引入了 range-based for loop,作为对旧有遍历方式的扩展和简化,旨在提高代码的可读性和安全性。 3. 说明 [-wc++11-extensions] 编译器标志的含义 -Wc++11-extensions 是GCC 编译器的一个警告标志,用于提示代码中使用了 C++11 的扩展特性。当你在编译 C++ 代码时,如果启用了这个警告标志,并且代码中使用...
The range-based for loop follows this general format:for( declaration : expression) { //do some loop stuff } C++ CopyHere’s an simple example which prints all the elements in a std::vector:std::vector<int> v1 = {-1, 3, 5, -8, 0}; std::cout << std::endl << "v1: " <...
for (auto num : numbers) { printf( "num = %d\n", num ); } return 0; } 汇编理解如下: int main() { # 入栈 00933F63 sub esp,150h 00933F69 push ebx 00933F6A push esi 00933F6B push edi 00933F6C lea edi,[ebp-150h]
We've already seen a few basic examples in What is C++11? To refresh your memory, the range-based for loop looks like this: 1 2 3 4 5 6 7 8 vector<int> vec; vec.push_back( 10 ); vec.push_back( 20 ); for (int i : vec ) { cout << i; }...