如何在Qt Creator中启用C++ 11?

And*_*kha 160 c++ qt c++11

标题非常具有自我描述性.我已经下载了Qt Creator 2.7.0,我正在尝试编译一些基本的C++ 11代码:

int my_array[5] = {1, 2, 3, 4, 5};
for(int &x : my_array)
{
  x *= 2;
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

range based for loops are not allowed in c++ 98 mode
Run Code Online (Sandbox Code Playgroud)

然而,根据这篇文章,这个版本的Qt Creator支持C++ 11.那么我该如何启用呢?

Ali*_*Ali 259

根据这个网站添加

CONFIG += c++11

到你的.pro文件(参见该网页的底部).它需要Qt 5.


其他答案,暗示

QMAKE_CXXFLAGS += -std=c++11(或QMAKE_CXXFLAGS += -std=c++0x)

也适用于Qt 4.8和gcc/clang.

  • @nurettin感谢您的反馈.如果你仔细检查答案的编辑历史(我和其他人),你会发现我的原始答案并不重复; 这实际上是另一个答案,无耻地偷走了我的答案的一部分,使我的答案看起来像一个副本.然后今年又出现了两个重复的答案.在编辑历史中自行检查.鉴于此信息,您会重新考虑您的downvote吗? (9认同)
  • 匿名的downvotes没有帮助任何人.答案有什么问题? (4认同)
  • @Troyseph这是我对情况的理解.我假设你正在使用gcc.如果一个版本的gcc支持`-std = c ++ 11`,那么它也应该支持(不推荐使用)`-std = c ++ 0x`标志,并且这两个标志应该具有相同的效果(显然在你的机器上不是这种情况).如果编译器支持`-std = c ++ 0x`,那并不意味着它理解`-std = c ++ 11`.因此,选择`-std = c ++ 0x`作为C++ 11兼容模式的默认值是一个合理的选择.在我的机器上,*至少根据手册页*,`-std = c ++ 0x`和`-std = c ++ 11`是相同的. (3认同)

Lem*_*ool 32

将其添加到.pro文件中

QMAKE_CXXFLAGS += -std=c++11
Run Code Online (Sandbox Code Playgroud)

要么

CONFIG += c++11
Run Code Online (Sandbox Code Playgroud)


Яoi*_*ois 19

作为处理阿里优秀答案中解决的两种情况的替代方案,我通常会补充说

# With C++11 support
greaterThan(QT_MAJOR_VERSION, 4){    
CONFIG += c++11
} else {
QMAKE_CXXFLAGS += -std=c++0x
}
Run Code Online (Sandbox Code Playgroud)

到我的项目文件.如果您不太关心人们在您的团队中使用哪个Qt版本,但是您希望他们在任何情况下都启用C++ 11,这可能很方便.


小智 7

添加到您的qmake文件

QMAKE_CXXFLAGS+= -std=c++11
QMAKE_LFLAGS +=  -std=c++11
Run Code Online (Sandbox Code Playgroud)