我不熟悉C 语法

C++ syntax I am not familiar with

本文关键字:语法 不熟悉      更新时间:2023-10-16

我看到一些我不熟悉的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