我看到一些我不熟悉的C 语法:
fftfilt *mark_filt;
.
.
.
mark_filt = new fftfilt( ... ); // I left out arguments for the constructor.
.
.
.
mark_filt = (fftfilt *)0;
.
我不明白什么(fftfilt *)0是指还是?也许一直使用C 的人可以向我解释一下?
谢谢霍华德
这是代表NULL
的旧方法,这通常只是定义为0
的宏。相反,您应该更喜欢
mark_filt = nullptr;
虽然我希望在那之前有一个new
有人叫delete mark_filt
第一个注释是正确的;这是C 的Pre 11方法,可显式地抛出一个指向正确类型的空指针。而且您是正确的,相当于mark_filt = NULL;
,有点。
c 对各种转换执行隐式类型促销,但这些促销是有限的。对于指针,C 11方法是使用NULL
或(pointer_type *)
铸件。NULL
本身具有特定于实现的定义,并在标准C 标题中以不同的方式实现(我相信Stdlib)。NULL
的两个常见实现是:
#define null 0
#define null(((void *)0)
这些分析取决于编译器,但是如果分配给非分支类型,则第二个将失败。它将被隐式地投入到正确的类型上,因为它没有指定指向的记录类型(即void
本质上是一个空类型,void *
是指向null类型的指针,或者是未指定的 类型)。
在C 11及更高版本中,使用mark_filt = nullptr
更常见,但是此代码会编译。
MSDN网站对此有一些很好的文档(无需插头):
- http://en.cppreference.com/w/cpp/types/null
- http://en.cppreference.com/w/cpp/language/implitic_conversion