GCC 4.4不支持C++11范围循环。它支持哪些其他范围循环语法?

8
我有一些使用了C++11特性的第三方工具,现在需要在gcc 4.4下进行编译。由于我对C++11的新特性并不熟悉,所以在谷歌搜索无果后,我想请教一下您的帮助。
我已经开启了C++0x开关,但这并没有帮助解决问题。
for (auto const& fixup : self->m_Fixups)

产生的错误是:
error: expected initializer before ':' token

GCC 4.4支持哪些与C++11范围循环语法等效的其它范围循环语法?


所以你的问题是:“我有这个不工作的代码,它在C99中的等效非工作代码是什么?” - Robert Harvey
1
他知道这个。他想知道在GCC中等价的是什么。 - Barmar
2个回答

8

这段代码是C++11中新增的范围for循环语法。与C++11中的其他一些特性不同,它在GCC 4.4中没有被实现。您可以尝试以下代码:

for( auto it = self->m_Fixups.begin(); it != self->m_Fixups.end(); ++it )
{
    const auto& fixup = *it;
    // the rest of the code...
}

上述代码使用了一些C++11特性,应该在GCC 4.4中可用。


正如Ben Voigt指出的那样:如果需要使代码更加高效,您也可以使用这个略微不太简洁的版本:

for( auto it = self->m_Fixups.begin(), end = self->m_Fixups.end(); it != end; ++it )
{
    const auto& fixup = *it;
    // the rest of the code...
}

1
+1,虽然在循环设置和保存期间应该只调用一次end() - Ben Voigt
我建议使用std::for_each和可能的lambda表达式,而不是手动编写循环。 - Andre Kostur
1
@AndreKostur Lambdas在GCC 4.4上也没有实现。 - Daniel Frey
@DanielFrey 哎呀!我版本不对。是的,在4.4中没有lambda :( 好的,用std::for_each和一个函数对象。 - Andre Kostur

0
如果您有boost,以下内容应该可以使用-std=c++0x(在gcc 4.4.7、RHEL6系统上进行了测试):
#include <boost/foreach.hpp>

BOOST_FOREACH(const auto &fixup, self->m_Fixups) {
    ...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接