我看到一些我不熟悉的C ++语法:
fftfilt *mark_filt;
.
.
.
mark_filt = new fftfilt( ... ); // I left out arguments for the constructor.
.
.
.
mark_filt = (fftfilt *)0;
.
我不明白(fftfilt *)0意味着什么? 也许有人一直使用c ++可以向我解释这个问题吗?
谢谢, 霍华德
答案 0 :(得分:2)
这是一种表示NULL
的旧方式,通常只是定义为0
的宏。你应该更喜欢
mark_filt = nullptr;
虽然我希望在那之前有一个名为new
delete mark_filt
人
答案 1 :(得分:0)
第一条评论是正确的;它是一种前C ++ 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网站上有一些很好的文档(没有插件):