我的问题是return;
与C ++中的return NULL;
相同?
据我所知,在C ++中,return NULL;
与指针上下文中的return 0;
相同。显然对于整数而言,情况并非如此,因为NULL无法添加,减去等等。并且有些人鼓励使用0而不是指针使用NULL,因为它更便于移植。我很好奇这是否是发生等价的另一个例子。
我怀疑它们是等价的,因为return;
表示返回'nothing'而NULL表示“没有”。但是,如果有人可以确认或否认这一点(当然有解释),我将非常感激!
答案 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
可能是一个扩展为0
或0UL
的宏。
一些现代编译器至少会警告你,如果它实际上是NULL
你写的。
并且有些人鼓励使用0而不是NULL指针,因为它更便于移植。我很好奇这是否是发生等价的另一个例子。
没有。我不同意这个建议。虽然我可以看到它的来源,但由于NULL
的确切定义因实施而异,因此使用NULL
会使 更容易用nullptr
替换你切换到C ++ 11,如果没有别的东西是自我记录的。
答案 1 :(得分:6)
return
,在构造函数或析构函数中时,没有表达式的 void
才有效。如果您尝试从返回int
,double
等的函数返回任何内容,则您的程序将无法编译:
错误:返回语句没有值,函数返回'int'
根据C ++ 11的§6.6.3/ 2:
既没有表达式也没有braced-init-list的return语句只能用于不返回值的函数,即返回类型为void的函数,构造函数(12.1)或析构函数(12.4)。
(感谢sftrabbit的优秀评论)。
答案 2 :(得分:0)
它的工作方式类似于void函数,返回只会退出函数并且根本不返回任何内容。这是asked before。
答案 3 :(得分:0)
return
,return 0
和return NULL
不相同。
return
仅对返回void
的函数有效,例如:
void func(...);
return 0
用于返回某些int
类型的函数,例如:
unsigned long func(...);
虽然它也适用于浮点类型:
double func(...) { ... return 0; }
return NULL
用于返回某些pointer
类型的函数,例如:
Something *func(...);
答案 4 :(得分:0)
生成的机器代码存在差异:
return
只会将指令指针放回调用者来自的位置。
return 0
或return 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()