如何让 C++0x / C++11 风格的基于范围的 for 循环与 clang 一起使用?

Posted

技术标签:

【中文标题】如何让 C++0x / C++11 风格的基于范围的 for 循环与 clang 一起使用?【英文标题】:how to get C++0x / C++11 style range-based for loops to work with clang? 【发布时间】:2011-09-06 04:21:51 【问题描述】:

我一直在使用带有 -std=c++0x 的 gcc 在 C++0x/11 中利用基于范围的 for 循环,如下所示:

for (int i : container) ...

我最近尝试过 clang (clang+llvm-2.9-x86_64-apple-darwin10),但这些语句开箱即用是编译错误。根据http://clang.llvm.org/cxx_status.html 支持。我尝试在命令行上添加 -stdlib=libc++,但随后我收到一个错误,即找不到 iostream 标头。我需要做什么才能让 clang 使用 C++0x/11 功能?

【问题讨论】:

您要编译的代码是什么?您是否尝试过包含<iostream>? clang 知道在哪里可以找到标准库吗?如果去掉基于范围的 for 循环,代码还能编译吗? 【参考方案1】:

这里的秘密是 LLVM 2.9 不支持基于范围的 for 循环。该文档对应于 LLVM/Clang 主线。要获得基于范围的 for 循环,请查看主线 SVN 中的 LLVM/Clang:http://clang.llvm.org/get_started.html

libc++ 对 C++'0x ('11!) 库支持很有用,但如果你想在 C++'0x 语言特性之上使用它的功能,你也必须设置它。有关如何设置的信息,请参阅:http://libcxx.llvm.org/

【讨论】:

以上是关于如何让 C++0x / C++11 风格的基于范围的 for 循环与 clang 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 for-range 循环切片? C++0x

Visual Studio 中基于 For 循环的 C++17 广义范围

使用 C++11 基于范围的正确方法是啥?

C++11 反向基于范围的 for 循环

C++11 反向基于范围的 for 循环

C++ STL应用与实现26: 如何使用std::for_each以及基于范围的for循环 (since C++11)