C++ nil vs NULL

JT.*_*JT. 10 c++ null

好的,我在头文件中有一些C++代码,声明如下:

void StreamOut(FxStream *stream,const FxChar *name = nil);
Run Code Online (Sandbox Code Playgroud)

我得到:错误:

'nil' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

零是一个帕斯卡的事,对吗?

我应该使用NULL吗?

我以为它们都是相同的,或者至少是零,不是吗?

Jar*_*Par 19

在C++中,您需要使用NULL0,或者在某些全新的编译器中使用nullptr.NULL对0 的使用在某些圈子中可能有点争论,但恕我直言,NULL是比0更受欢迎的用法.

  • @joshperry,对不起,但你没有澄清,但很困惑.`0`不是指针值,但它是一个整数值 - 不禁止任何系统.它可以转换为指针值.见http://stackoverflow.com/questions/423823/whats-your-favorite-programmer-ignorance-pet-peeve/1331729#1331729 (6认同)
  • @Carl Norum,你使用的是"is"的不同定义.如果"A可以转换为B",则表示"A是B".将参数传递给函数时,该定义很有意义.但是对大多数人来说(至少我会这么认为),`is`在脱离背景时意味着"是同一个".所以这些人认为`0`既是一个整数又是一个指针,如果你做`ptr + 0`(当然这是一个"指针上下文")你会想到你可以添加一个指针和一个空指针等.最好保持清楚,然后说"在需要时将0转换为空指针". (4认同)
  • 它是`nullptr` - channel9有一些很好的视频:http://channel9.msdn.com/shows/Going+Deep/Stephan-T-Lavavej-Everything-you-ever-wanted-to-know-about-nullptr / (2认同)

Mar*_*cin 13

nil在标准C++中不存在.请NULL改用.


not*_*oop 6

是的。它NULLCand中C++,而nil在 Objective-C 中。

每种语言都有自己的对象标识符。在C标准库中,NULL是 的 typedef ((void *)0)。在C++标准库中,是orNULL的 typedef 。00L

但是恕我直言,您永远不应该使用 0 代替NULL,因为它有助于提高代码的可读性,就像在代码中使用常量变量一样:在不使用 NULL 的情况下,值 0 用于空指针以及循环中的基索引值以及空列表的计数/大小,这使得更难知道哪个是哪个。此外,它更容易grep实现等。

  • @onebyone:NULL在C++中是一个*整数*,但不一定是特定的“int”。`NULL` 可以定义为 `OL`,这意味着在这种情况下 `sizeof(NULL) == sizeof(long)`。 (2认同)