我的问题和C++return;
一样吗?return NULL;
我知道在 C++ 中,与指针上下文中return NULL;
的相同return 0;
。显然,对于整数,情况并非如此,因为 NULL 不能加、减等。有些人鼓励使用 0 而不是 NULL 作为指针,因为它更便于可移植性。我很好奇这是否是另一个发生等价的例子。
我怀疑它们是等价的,因为return;
说返回“无”而 NULL 是“无”。但是,如果有人可以确认或否认这一点(当然有解释),我将不胜感激!
和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
很可能是一个扩展为0
or的宏0UL
。
NULL
但是,如果它实际上是您编写的,一些现代编译器至少会警告您。
有些人鼓励使用 0 而不是 NULL 作为指针,因为它更便于移植。我很好奇这是否是另一个发生等价的例子。
不,我不同意这个建议。虽然我可以看到它的来源,因为NULL
' 的确切定义因实现而异,所以当您切换到 C++11 时,如果没有其他东西是自记录的,那么usingNULL
将使替换它变得更加容易。nullptr
return
void
仅当您的函数在构造函数或析构函数中声明时,没有表达式才有效。int
如果您尝试从返回 a 、 a等的函数中不返回任何内容double
,您的程序将无法编译:
错误:没有值的返回语句,在返回“int”的函数中</p>
根据 C++11 的 §6.6.3/2:
既没有表达式也没有花括号初始化列表的 return 语句只能用于不返回值的函数,即返回类型为 void、构造函数 (12.1) 或析构函数 (12.4) 的函数.
(感谢 sftrabbit 的出色评论)。
return
,return 0
并且return NULL
不一样。
return
仅对返回的函数有效void
,例如:
void func(...);
return 0
用于返回某种int
类型的函数,例如:
unsigned long func(...);
虽然它也适用于浮点类型:
double func(...) { ... return 0; }
return NULL
用于返回某种pointer
类型的函数,例如:
Something *func(...);
它像一个 void 函数一样工作,其中 return 将简单地退出函数并且根本不返回任何内容。以前有人问过这个问题。
生成的机器代码有所不同:
return
只会将指令指针放回调用者的来源。
return 0
或者return NULL
将放入0
堆栈,然后将指令指针放回调用者的来源。(在 C 中,NULL
通常映射到0
,尽管在不同的实现中可能(可能?)有所不同。在 C++ 中,NULL
不应该使用)。
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()