首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定义nullptr以支持C++03和C++11?

如何定义nullptr以支持C++03和C++11?
EN

Stack Overflow用户
提问于 2012-05-08 10:26:44
回答 2查看 11.1K关注 0票数 11

可能重复:

“Backporting” nullptr to C++-pre-C++0x programs

如何定义nullptr以支持C++03和C++11?

下面的代码是用C++03和C++11编译的,而不改变C++11编译器中nullptr的含义吗?

代码语言:javascript
复制
#include <cstddef>

#if !defined(nullptr)
#define nullptr NULL
#endif
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-08 10:32:58

在C++11中,nullptrnullptr_t类型。与NULL相比,它的一个巨大优势(或者0会说,因为他不喜欢宏)是这两个函数之间的优势:

代码语言:javascript
复制
void foo(char*);
void foo(int);

foo(nullptr)将调用char*重载,但foo(NULL)将调用int重载。因此,您的解决方案在大多数情况下都可以工作,但是您可能会出现函数重载的错误。

票数 13
EN

Stack Overflow用户

发布于 2012-05-08 10:45:47

AFAIK无法从代码中自动检测nullptr支持。

在实践中,你可以把它理解为“不可能”,这是一个相当强大的“AFAIK”。

因此,要做的事情是使用特定于编译器的代码和/或构建命令。例如,在每个相关源中添加一个

代码语言:javascript
复制
#include <cpp/nullptr.h>

在build命令中,调整包含路径,以便对于具有nullptr支持的编译器来说,这会获得一个空的头,而对于缺少nullptr的旧编译器,它会选择一个定义它的标头(例如)。

然后进行彻底的测试!

我称之为具有多个版本的头的一般概念,其中只有一个由build命令选择,即一个虚拟头。围绕这一点建立许多机制是可能的,包括只有在更普遍的情况下才有意义的惯例。幸运的是,对于这个特殊的案例来说,这是不必要的,但也许值得注意。

总结一下:让C++源代码神奇地做一些事情并不是解决问题的方法。在构建级别添加一些帮助似乎是正确的。:-)

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10496824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档