我目前正在我的Qt应用程序中使用C++11功能。但是,我想在我的应用程序中使用一些新的C++14特性。
要在Qt应用程序中启用C++11,只需在qmake项目文件中添加一行,即:
CONFIG += c++11
对于早期版本,请执行以下操作:
QMAKE_CXXFLAGS += -std=c++1y
我已经尝试过用C++14做同样的事情,但是不起作用。我修改了上面提到的qmake项目行,如下所示:
CONFIG += c++14
对于早期版本,请执行以下操作:
QMAKE_CXXFLAGS += -std=c++1y
在此之后,在尝试构建项目时,出现了许多以前不存在的编译错误。这个项目编译得很好,但是,如果我尝试使用任何C++14特性,就会得到一个编译错误。这是一个示例:
template<typename T>
constexpr T pi = T(3.1415926535897932385);
这是对应的错误:
main.cpp:7: error: template declaration of 'constexpr const T pi'
constexpr T pi = T(3.1415926535897932385);
^
在QtCreator中使用qmake工程时,如何开启C++14功能?
我使用的是Qt 5.3.2、Qt Creator 3.2.1和MinGW 4.8.2 32位。
发布于 2014-10-01 02:09:19
Qt创建器只是一个IDE。
您可以将IDE视为“更智能的文本编辑器”,它可以帮助开发人员进行调试、构建、代码完成、文件管理等工作。
IDE在编译期间是无关紧要的。
重要的是你的编译器,,它独立于你的集成开发环境。
g++ 4.8.x不支持许多C++14功能:check out this page to learn what C++14 features are supported。
发布于 2014-12-13 20:39:54
This is now supported properly from Qt 5.4。您只需在您的qmake项目文件中键入以下内容:
CONFIG += c++14
Thiago在2014年中进行了必要的代码更改:
Add support for CONFIG += c++14
我刚刚创建了必要的文档更改:
Mention the c++14 CONFIG option in the qmake variable reference
请注意,变量模板只支持从gcc 5.0,但然后您的代码就可以正常工作。这可以用来和老的gcc一起测试C++14:
main.cpp
#include <iostream>
int main()
{
// Binary literals: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3472.pdf
// Single-quotation-mark as a digit separator: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3781.pdf
std::cout << 0b0001'0000'0001;
return 0;
}
main.pro
TEMPLATE = app
TARGET = main
CONFIG -= qt
CONFIG += c++14
SOURCES += main.cpp
构建并运行
qmake && make && ./main
输出
257
发布于 2016-04-22 16:30:31
出于某种奇怪的原因,这就是Qt所做的事情:如果编译器是gcc或mingw,则CONFIG+=C++14
会被转换为编译器标志-std=c++14
(这正是您所期望的)。
如果它是另一个编译器(比如clang),CONFIG=C++14
会愚蠢地转换成-std=c++11
(原文如此!),所以即使你的clang版本正确地支持C++14,你也会得到关于不支持特性的错误。
要修复此问题,请显式指定该标志:
QMAKE_CXXFLAGS += -std=c++14
这样,您就可以确定您的编译器(g++、mingw或clang)将接收到正确的标志。
https://stackoverflow.com/questions/26127217
复制相似问题