7

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

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

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

4

6 回答 6

13

和C++中return;的一样吗?return NULL;

不。

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

return NULL返回 value NULL,并且它所在函数的返回类型必须与NULL.


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

有点。NULL可能不等同于0,但它至少会转换为。


显然,对于整数,情况并非如此,因为 NULL 不能加、减等。

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

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


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

不,我不同意这个建议。虽然我可以看到它的来源,因为NULL' 的确切定义因实现而异,所以当您切换到 C++11 时,如果没有其他东西是自记录的,那么usingNULL将使替换它变得更加容易nullptr

于 2012-11-03T19:59:38.053 回答
7

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

错误:没有值的返回语句,在返回“int”的函数中</p>

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

既没有表达式也没有花括号初始化列表的 return 语句只能用于不返回值的函数,即返回类型为 void、构造函数 (12.1) 或析构函数 (12.4) 的函数.

(感谢 sftrabbit 的出色评论)。

于 2012-11-03T19:55:54.070 回答
1

returnreturn 0并且return NULL一样

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

void func(...);

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

unsigned long func(...);

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

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

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

Something *func(...);
于 2012-11-03T19:56:25.870 回答
0

它像一个 void 函数一样工作,其中 return 将简单地退出函数并且根本不返回任何内容。以前有人问过这个问题。

于 2012-11-03T19:55:33.937 回答
0

生成的机器代码有所不同:

return只会将指令指针放回调用者的来源。

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

于 2012-11-03T19:58:19.520 回答
0
const testNullParity = () => {
 return null 
}

const testNullParity2 = () => {
 return 
}


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

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

于 2020-07-21T18:23:44.737 回答