【发布时间】:2013-01-27 13:25:14
【问题描述】:
C++ 中函数指针的默认值是多少? (显然不可能是NULL,那是什么?)
这个程序应该如何表现以及为什么?
struct S { void (*f)(); };
int main()
{
S s = S();
s.f(); // What is the value of s.f?
}
【问题讨论】:
-
(显然不可能是
NULL, ...)。为什么? -
@Mehrdad:是的,你错了。
-
@Angew:嗯... 任何指针?所以你的意思是即使 member 函数指针也可以为空?
-
@Mehrdad 也许当指针为空时它正在处理极端情况?即当指针指向没有函数时调用默认处理程序。
-
@Angew 不能将宏
NULL定义为((void*)0)的原因是因为 C++ 标准规定不能。0的类型为int,除特殊措辞外,不能分配给任何指针。((void*)0)具有void*类型,除了 C 标准中的特殊措辞外,不能将其分配给 C 中的函数指针。这两个标准都包含允许空指针常量破坏类型系统的特殊语言。 C++使用传统定义;出于某种原因,C 委员会在空指针常量中扩展了合法类型。
标签: c++ function-pointers