何时使用Q_NULLPTR?

DBe*_*nko 18 c++ null qt c++11

我看到Q_NULLPTR在Qt源代码和示例中被大量使用,但是我没有找到关于它究竟是什么以及什么时候应该使用的文档.

例如,在新的Qt v5.6中添加的新Qt SerialBus模块的官方演示中:

if (!m_canDevice->connectDevice()) {
    delete m_canDevice;
    m_canDevice = Q_NULLPTR;
Run Code Online (Sandbox Code Playgroud)

这是否适用于nullptr在C++ 11中添加之前的目的?如果是这样,现在我们有C++ 11,我应该使用Q_NULLPTR吗?

PS:我尝试在Qt源代码中搜索宏的定义,但未能找到它.

And*_* R. 20

Q_NULLPTR是一个宏,它被替换为nullptr好像编译器支持c ++ 11和NULL(0如果它不支持).如果你使用c ++ 11,你可以写nullptr; NULL如果你不这样做,请使用.

  • [这是源代码](https://code.woboq.org/qt5/qtbase/src/corelib/global/qcompilerdetection.h.html#990),以防有人需要证明. (5认同)

dte*_*ech 16

在C++ 11中添加之前,这是否符合nullptr的目的?如果是这样,既然我们有C++ 11,我应该使用Q_NULLPTR吗?

是(有些)和否.

C++在当时还很缺乏,所以Qt有自己的东西,后来随着C++赶上了这些功能而变得过时了.

话虽如此,Q_NULLPTR(在)功能上并不相同nullptr,(正如Andrei指出的那样,如果支持C++ 11扩展到nullptr它)它没有给你类型安全,只是语法"糖".它说明了阅读代码的人的意图,而不是编译器的意图nullptr.