基于范围的 for 语句中的 GCC 错误
GCC bug in range-based for statement
我似乎在GCC中遇到了一个奇怪的错误。考虑
for (int i = 5 : {1, 2, 3})
std::cout << i << ", ";
虽然这个无意义的代码被 Clang 正确拒绝,但它在所有最近的 GCC 版本上都能很好地编译和执行。奇怪的是,根本没有产出,既不产生1, 2, 3
,也不产生5, 5, 5
。
如果我们现在更进一步并考虑此代码
int arr[] {1, 2, 3};
for (int i = 5: arr)
std::cout << i << ", ";
GCC 警告我们不使用数组,这意味着循环被忽略。
此代码是否调用未定义的行为?还是格式不正确,无需诊断?或者它只是一个奇怪的错误?
该标准在 [stmt.ranged]/1 中指定将声明替换为以下行:
范围声明
= *__begin;
。这样的声明显然是格式错误的。
编辑:报告错误后,Paolo Carlini已将其修复为5.0版。
这两个示例都是无效的语法,需要进行诊断。
基于范围的 for 的语法在 6.5/1 中:
迭代语句:
- 。
for (
for range- -声明
:
for-range-initializer)
语句对于范围声明:
- attribute-specifier-seq opt decl-specifier-seq declarator
这不允许在冒号之前使用初始值设定项。
相关文章:
- 如何在 FOR 语句中间阻止 Visual Studio 2017 c++ 自动完成)?
- C++:关于for语句和参数的一般问题
- 这个基于范围的'for'语句需要一个合适的函数,但找不到任何函数
- python 和 c++ 的结果对于嵌套的 for 语句是不同的
- 在 c++ 中创建递归 for 语句
- 如何查找用户使用 do/while、While 语句或 For 语句输入的几个整数的总和
- for 语句内的动态数组
- 为什么基于范围的 for 语句通过 auto&& 获取范围?
- ranged-for 语句中的表达式是否在每次迭代时计算
- 即使我设置了限制,我的 for 语句也会不断重复
- Visual Studio 2015正在缩进for语句的多行
- 在for语句参数内部的C/C++算术运算中
- 获取 while、if 和 for 语句的用户定义类的对象值
- sqlite3_prepare_v2 返回 null for 语句
- 基于范围的 for 语句中的 GCC 错误
- for 语句超出范围错误
- 计算没有If/While/For语句或任何数据结构的更改
- C++11:基于范围的 for 语句:"range-init"生命周期?
- 为什么对“for”语句范围有特殊规则
- 使用for语句计算int输入的和