如何让 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 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章