Col*_*mbo 23 c++ gcc for-loop g++ c++11
我似乎在GCC遇到了一个奇怪的错误.考虑
for (int i = 5 : {1, 2, 3})
std::cout << i << ", ";
Run Code Online (Sandbox Code Playgroud)
虽然这个无意义的代码被Clang正确拒绝,但它在所有最近的GCC版本上编译并执行正常.但奇怪的是,没有输出,没有1, 2, 3也没有5, 5, 5,生产.
如果我们现在进一步考虑这个代码
int arr[] {1, 2, 3};
for (int i = 5: arr)
std::cout << i << ", ";
Run Code Online (Sandbox Code Playgroud)
GCC警告我们,该阵列没有使用,这意味着该循环被忽略.
此代码是否调用未定义的行为?或者它是不正确的,没有诊断要求?或者它只是一个奇怪的错误?
该标准在[stmt.ranged]/1中指定声明被替换为以下行:
对于范围声明
= *__begin;
......这样的声明显然是不正确的.
编辑:报告错误后,Paolo Carlini已将其修复为5.0版.
asc*_*ler 10
这两个示例都是无效的语法,这需要诊断.
基于范围的for的语法是6.5/1:
迭代声明:
- ...
for (for-range-declaration:for-range-initializer)语句范围声明:
- attribute-specifier-seq opt decl-specifier-seq 声明符
在冒号之前不允许初始化程序.
| 归档时间: |
|
| 查看次数: |
506 次 |
| 最近记录: |