我目前仍然坚持使用g ++ 4.4.7,并尝试使用它(使用-std = gnu ++ 0x标志)来编译使用“foreach”结构的c ++程序:
190: void
191: Block::get_record_types(D_RecordType_Vector& record_type_vector) const {
192: for ( D_Record_Map::value_type rt_v_i : _records) {
193:
194: record_type_vector.push_back(rt_v_i.first);
195: }
196: }
第一个错误让我认为它只是不识别构造:
./c/Block.cpp:192: error: expected initializer before ':' token
./c/Block.cpp:196: error: expected primary-expression before '}' token
./c/Block.cpp:196: error: expected ';' before '}' token
./c/Block.cpp:196: error: expected primary-expression before '}' token
./c/Block.cpp:196: error: expected ')' before '}' token
./c/Block.cpp:196: error: expected primary-expression before '}' token
./c/Block.cpp:196: error: expected ';' before '}' token
这在Apple clang-425上正确编译。
我意识到g ++ 4.4.7已经过时了,但是在给定编译器标志的情况下,它是否应该识别新构造?
答案 0 :(得分:9)
不,GCC 4.6中添加了支持,请参阅http://gcc.gnu.org/gcc-4.6/changes.html#cplusplus和http://gcc.gnu.org/projects/cxx0x.html
我意识到g ++ 4.4.7已经过时了,但是在给定编译器标志的情况下,它是否应该识别新构造?
不,为什么要这样?您建议有人修改C ++解析器以理解新功能,只是为了拒绝它。这将是浪费时间 - 如果有人有时间修改解析器,为什么不只是添加对该功能的支持?否则他们必须修改代码,添加测试用例(测试它不支持功能)等等。代码更改以识别新语法不仅仅是神奇地发生。
答案 1 :(得分:3)
GCC 4.4.0是released April 23, 2009。基于范围的for循环的措辞是finalized July 16, 2009。我不知道任何具有预知能力的编译器编写者。