我的应用程序可能会用在仍然默认为Qt4.x而不是Qt5.x的系统上,而我正试图对一个版本的“快速而脏”的端口进行编译/链接并使用主要版本运行的图书馆。我想知道在Qt4.x中缺少Q_NULLPTR的最佳方法是什么?我看到this SO回答中提到的链接,其中定义为:
#ifdef Q_COMPILER_NULLPTR
# define Q_NULLPTR nullptr
#else
# define Q_NULLPTR NULL
#endif
所以我应该使用:
contains(QT_MAJOR_VERSION, 4) {
DEFINES += Q_NULLPTR=NULL
}
在我的qmake
项目文件中?
答案 0 :(得分:0)
Q_NULLPTR
是Qt支持C ++ 11兼容编译器以及旧版C ++ 98/03编译器的方法。你真的需要那种复杂程度吗?如果没有,那么直接使用NULL
,0
或nullptr
,具体取决于您的编译器。
否则事情变得更复杂,因为您需要检测当前活动的C ++版本。请参阅下面的编辑。
当然,您始终可以选择简单的方法,并使用适用于所有C ++版本的NULL
或0
。
修改强>
要模仿Qt5的行为,你可以使用它:
#if __cplusplus >= 201103L
#define Q_NULLPTR nullptr
#else
// not NULL to stay consistent with Qt’s convention
#define Q_NULLPTR 0
#endif
包含一个标题只是为了访问Q_NULLPTR
并不是非常好,因此您可能希望在 .pro 文件中定义该宏。但是,我不知道如何用Qt4的QMake检测活动的C ++版本。