【发布时间】:2015-11-10 18:37:27
【问题描述】:
我知道在我们的现代世界中,NULL 和 0 并不是使用指针操作的最佳实践,并且根据 cppreference:
指针转换 一个空指针常量(见 NULL),可以是 转换为任意指针类型,结果为空指针 该类型的值。这种转换(称为空指针转换) 允许作为单次转换转换为 cv 限定类型, 也就是说,它不被视为数字和限定符的组合 转化率。
但是为什么这个代码是不允许的,而 gcc 和 clang 给我一个错误?
A* foo()
{
return (bar(), NULL);
}
错误:从 long int 到 A* 的无效转换
【问题讨论】:
-
您的意思是在 gcc 中允许,而在 clang 中出错?
-
请发布完整的代码。我们不知道
A和bar()是什么,可能有一个重载的operator,,甚至可能有宏使问题进一步复杂化(事实上,NULL是一个宏,所以如果没有#include,您将无法使用它。 -
我怀疑编译器将 NULL 转换为与 bar 的返回类型相同的类型,因为它是逗号表达式的一部分。然后将其转换为 A 指针时遇到问题。