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

时间:2012-11-03 19:53:36

标签: c++ null return

我的问题是return;与C ++中的return NULL;相同?

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

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

6 个答案:

答案 0 :(得分:11)

  

与{C ++中的return;相同,是return NULL;吗?

没有

return用于从没有返回值的函数中“中断”,即返回类型为void

return NULL返回值NULL,其中找到的函数的返回类型必须与NULL兼容。


  

据我所知,在C ++中,return NULL;与指针上下文中的return 0;相同。

排序。 NULL可能不等同于0,但它至少会转换为某种内容。


  

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

你可以对指针进行加法和减法。但是,NULL无论如何都必须具有整数类型(在C ++ 03中为4.10 / 1和18.1 / 4),所以它没有实际意义。 NULL可能是一个扩展为00UL的宏。

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


  

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

没有。我不同意这个建议。虽然我可以看到它的来源,但由于NULL的确切定义因实施而异,因此使用NULL会使 更容易用nullptr替换你切换到C ++ 11,如果没有别的东西是自我记录的。

答案 1 :(得分:6)

只有当您的函数声明为return,在构造函数或析构函数中时,没有表达式的

void才有效。如果您尝试从返回intdouble等的函数返回任何内容,则您的程序将无法编译:

  

错误:返回语句没有值,函数返回'int'

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

  

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

(感谢sftrabbit的优秀评论)。

答案 2 :(得分:0)

它的工作方式类似于void函数,返回只会退出函数并且根本不返回任何内容。这是asked before

答案 3 :(得分:0)

returnreturn 0return NULL 相同。

return仅对返回void的函数有效,例如:

void func(...);

return 0用于返回某些int类型的函数,例如:

unsigned long func(...);

虽然它也适用于浮点类型:

double func(...) { ... return 0; }

return NULL用于返回某些pointer类型的函数,例如:

Something *func(...);

答案 4 :(得分:0)

生成的机器代码存在差异:

return只会将指令指针放回调用者来自的位置。

return 0return NULL会将0放在堆栈上,然后会将指令指针放回调用者来自的位置。 (在C中,NULL通常映射到0,尽管可以(可能?)在不同的实现中有所不同。在C ++中,不应该使用NULL

答案 5 :(得分:0)

const testNullParity = () => {
 return null 
}

const testNullParity2 = () => {
 return 
}


console.log(testNullParity()) //null
console.log(testNullParity2())  //undefined

在javascript中,return是undefined的缩写,因为null和undefined是两种不同的类型,但是它们大致相等,即。 testNullParity()== testNullParity2()为true,但不是testNullParity()=== testNullParity2()