C ++语法我不熟悉

时间:2017-09-30 18:51:27

标签: c++

我看到一些我不熟悉的C ++语法:

fftfilt *mark_filt;
.
.
.
mark_filt = new fftfilt( ... ); // I left out arguments for the constructor.
.
.
.
mark_filt = (fftfilt *)0;
.

我不明白(fftfilt *)0意味着什么? 也许有人一直使用c ++可以向我解释这个问题吗?

谢谢, 霍华德

2 个答案:

答案 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网站上有一些很好的文档(没有插件):