可能重复:
“Backporting” nullptr to C++-pre-C++0x programs
如何定义nullptr以支持C++03和C++11?
下面的代码是用C++03和C++11编译的,而不改变C++11编译器中nullptr的含义吗?
#include <cstddef>
#if !defined(nullptr)
#define nullptr NULL
#endif发布于 2012-05-08 10:32:58
在C++11中,nullptr是nullptr_t类型。与NULL相比,它的一个巨大优势(或者0会说,因为他不喜欢宏)是这两个函数之间的优势:
void foo(char*);
void foo(int);foo(nullptr)将调用char*重载,但foo(NULL)将调用int重载。因此,您的解决方案在大多数情况下都可以工作,但是您可能会出现函数重载的错误。
发布于 2012-05-08 10:45:47
AFAIK无法从代码中自动检测nullptr支持。
在实践中,你可以把它理解为“不可能”,这是一个相当强大的“AFAIK”。
因此,要做的事情是使用特定于编译器的代码和/或构建命令。例如,在每个相关源中添加一个
#include <cpp/nullptr.h>在build命令中,调整包含路径,以便对于具有nullptr支持的编译器来说,这会获得一个空的头,而对于缺少nullptr的旧编译器,它会选择一个定义它的标头(例如)。
然后进行彻底的测试!
我称之为具有多个版本的头的一般概念,其中只有一个由build命令选择,即一个虚拟头。围绕这一点建立许多机制是可能的,包括只有在更普遍的情况下才有意义的惯例。幸运的是,对于这个特殊的案例来说,这是不必要的,但也许值得注意。
总结一下:让C++源代码神奇地做一些事情并不是解决问题的方法。在构建级别添加一些帮助似乎是正确的。:-)
https://stackoverflow.com/questions/10496824
复制相似问题