基于范围的for循环,不指定变量类型

时间:2016-01-09 19:00:39

标签: c++ c++11 for-loop gcc

我刚刚发现这个编译没有错误(gcc 5.3):

std::vector<whatever> vec;

for( e: vec )
  // do something

所有编译器都会发出此警告:

  

警告:没有类型说明符的基于范围的for循环仅适用于-std = c ++ 1z或-std = gnu ++ 1z

有人可以解释一下:

  • 该代码的作用(它只是一种假设auto而没有输入它的方式,还是有更多?)
  • c ++ 1z是什么(我知道c ++ 11,c ++ 14,从未听说过c ++ 1z ......)

1 个答案:

答案 0 :(得分:9)

该提案(尚未被接受,因此它未被安排成为该语言的官方部分)是当您省略了类型说明符时,类型说明符将等同于{ {1}},所以你的for循环相当于:

auto &&

有关详细信息,例如(当前)标准的动机和具体影响,请参阅提案N3853

为了完整性:C ++ 1z是作为C ++ 17工作的代号。它是偶然出现的:成为C ++ 11的内容被称为&#34; C ++ 0x&#34;相当长一段时间。当它接近完成时,人们想要一种方式来引用 next 版本,因此它们增加了std::vector<whatever> vec; for( auto &&e: vec ) // do something (最初只代表&#34;一些未知数字&# 34;)到x。在那之后,很明显,来了y,给了z