当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《基于范围的for循环,不指定变量类型》经验,为你挑选了1个好方法。

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

std::vector vec;

for( e: vec )
  // do something

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

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

有人能解释一下:

那个代码做了什么(它只是一种假设auto而不是键入它,或者还有更多吗?)

c ++ 1z是什么(我知道c ++ 11,c ++ 14,从未听说过c ++ 1z ...)

Jerry Coffin.. 9

该提议(尚未被接受,因此它未被安排成为该语言的官方部分)是当您省略了类型说明符时,类型说明符将等效auto &&,因此您的for循环将等效于:

std::vector vec;

for( auto &&e: vec )
  // do something

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

为了完整性:C++ 1z是用于C++ 17的代码名称.它是偶然出现的:成为C++ 11的内容在很长一段时间内被称为"C++ 0x".当它接近完成时,人们想要一种方式来参考下一个版本,所以他们增加了x(最初只代表"一些未知数字")y.在那之后,很明显,来了z,给予C++1z.



1> Jerry Coffin..:

该提议(尚未被接受,因此它未被安排成为该语言的官方部分)是当您省略了类型说明符时,类型说明符将等效auto &&,因此您的for循环将等效于:

std::vector vec;

for( auto &&e: vec )
  // do something

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

为了完整性:C++ 1z是用于C++ 17的代码名称.它是偶然出现的:成为C++ 11的内容在很长一段时间内被称为"C++ 0x".当它接近完成时,人们想要一种方式来参考下一个版本,所以他们增加了x(最初只代表"一些未知数字")y.在那之后,很明显,来了z,给予C++1z.


几个月前海湾合作委员会将其从行李箱中取出.我希望他们重新调整代码以产生错误 - 现在GCC对`for(x:v)`的诊断很糟糕.
推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有