不那么新的C++标准学习笔记 logo 不那么新的C++标准学习笔记

编译器支持最低版本要求:

  • GCC: 6
  • MSVC: 19.1
  • Clang: 3.9

提案: P0184R0

C++11引入的基于范围的for循环要求beginend(起始值和结尾值)具有相同的类型,这对于大多数情况来说并没有什么问题,比如在遍历STL容器时,总是能返回相同类型的beginend

但是有人觉得这个规范过于受限,于是C++17放开了这个限制,将原来的等价代码修改如下:

{
  auto && __range = for-range-initializer;
  auto __begin = begin-expr;
  auto __end = end-expr;
  for ( ; __begin != __end; ++__begin ) {
    for-range-declaration = *__begin;
    statement
  }
}

与C++11中的相比,唯一的不同就是__begin__end可以具有不同类型了,只要它们两个支持通过operator!=比较即可。

这为类作者、库作者提供了更多的灵活性。

相关链接

感觉不错,小额赞助一下!

Hosted by Coding Pages, 本站由 @missdeer 创建,由 Jekyll 于 2017-12-07 生成,感谢 CloudCannon 制作的theme: Edition ,感谢 Let's Encrypt 提供免费的SSL证书服务。本站点采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。© 2017