Tre*_*key 9 c++ for-loop auto c++17
我记得曾经有人告诉我,
"不需要基于
auto内部范围的for循环.如果我们要删除它,那么语言就 不会含糊不清."
这是真实的陈述吗?
以下代码是否有效的C++语法?
for (elem : range){...}
Run Code Online (Sandbox Code Playgroud)
我原以为这已经是有效的语法,但是当我去编译时
clang++ --std=c++1z,我出现了以下错误:
range-based for loop requires type for loop variable
for (elem: range){
Run Code Online (Sandbox Code Playgroud)
编译器仍然将其识别为基于范围的for循环,那么为什么它也不能导出类型呢?
Sha*_*our 10
的:
for (elem : range){...}
Run Code Online (Sandbox Code Playgroud)
语法目前无效,但有人建议使用这种有效语法,gcc 5.2支持该语法(请参见实时):
#include <vector>
int main()
{
std::vector<int> v ;
for( elem : v )
{
}
}
Run Code Online (Sandbox Code Playgroud)
如果我们在C++ 14模式下尝试这个,它说:
警告:基于范围的for循环没有类型说明符,仅适用于-std = c ++ 1z或-std = gnu ++ 1z
所以这显然可行,并已在gcc中实现.看起来在gcc 6.0中删除了此功能.
据我所知,这是在gcc中实现的,期望提议N3853:基于范围的For-Loops:下一代将被接受,但它被拒绝,更新版本N3994说:
这更新了N3853(参见[1]),它提出了语法"for(elem:range)",通过添加对属性的支持和回答其他问题.有关此功能背后的基本原理,请参阅原始提案,此处不再重复.
我们可以看到它在EWG第81期被拒绝,我们也可以从Urbana会议纪要中看到这一点.尽管该提案存在许多问题,但我认为STL在提案的问答部分提出了令人信服的一系列论点,我对该提案遭到拒绝感到失望.