在C++中,是"返回"; 与"return NULL;"相同的事情?

Der*_*k W 6 c++ null return

我的问题return;return NULL;C++一样?

我理解在C++中,与指针的上下文return NULL;相同return 0;.显然对于整数,情况并非如此,因为NULL不能被添加,减去等等.并且有些人鼓励使用0而不是指针使用NULL,因为它更便于移植.我很好奇这是否是发生等价的另一个例子.

我怀疑它们是等价的,因为它们return;说返回'没有'而NULL是'没有'.但是,如果有人可以确认或否认这一点(当然有解释),我将非常感激!

Lig*_*ica 11

return;相同return NULL;的C++?

没有.

return用于从没有返回值的函数"中断",即返回类型void.

return NULL返回值NULL,并且找到的函数的返回类型必须兼容NULL.


我理解在C++中,与指针的上下文return NULL;相同return 0;.

有点.NULL可能不等同于0,但它至少会转换为某种东西.


显然,对于整数,情况并非如此,因为无法添加,减去NULL等.

您可以对指针执行加法和减法.但是,NULL无论如何必须具有整数类型(C++ 03中的4.10/1和18.1/4),所以它没有实际意义.NULL很可能是一个扩展到0或的宏0UL.

但是,一些现代编译器至少会警告你,如果它实际上是NULL你写的.


并且有些人鼓励使用0代替NULL来指示,因为它更便于移植.我很好奇这是否是发生等价的另一个例子.

不,我不同意这个建议.虽然我能看到它是从,因为未来NULL的确切定义在不同的实现而不同,使用NULL将使很多容易与替换nullptr,当你切换到C++ 11,如果不出意外是自文档.

  • @dasblinkenlight:并非Stroustroup所说的一切都必须正确!不要忘记他首先负责C++:P (3认同)
  • +1建议使用'0`而不是'NULL` [来自Stroustroup](http://www.stroustrup.com/bs_faq2.html#null),但他并不是所有关于这个问题的人都说过:他还提到过在C++ 11中使用`nullptr` :) (2认同)

das*_*ght 6

return没有表达式只有在声明函数void,构造函数或析构函数时才有效.如果您尝试从返回a int,a double等的函数中返回任何内容,则程序将无法编译:

错误:没有值的return语句,在返回'int'的函数中

根据C++ 11的§6.6.3/ 2:

不带表达式和braced-init-list的return语句只能用于不返回值的函数,即返回类型为void的函数,构造函数(12.1)或析构函数(12.4) .

(感谢sftrabbit的优秀评论).

  • 参见C++ 11的第6.6.3/2节:"既没有*表达式*也没有*braced-init-list*的return语句只能用于不返回值的函数,即函数返回类型为void,构造函数(12.1)或析构函数(12.4)." (6认同)