C++ 在C++;,是";返回&引用;与“相同的事情”;返回NULL&引用;?
我的问题是C++ 在C++;,是";返回&引用;与“相同的事情”;返回NULL&引用;?,c++,null,return,C++,Null,Return,我的问题是返回与相同,返回NULL?p> 我理解,在C++中,返回null;与相同,返回0在指针的上下文中。显然,对于整数来说,情况并非如此,因为NULL不能被加、减等。有些人鼓励指针使用0而不是NULL,因为它更便于移植。我很好奇这是否是另一个等价的例子 我怀疑它们是等价的,因为返回说的是return'nothing',NULL是'nothing'。但是,如果有人能够确认或否认这一点(当然,还有解释),我将非常感激 它的工作原理类似于void函数,其中返回将简单地退出函数,而不返回任何内容。这
返回
与相同,返回NULL?p>
我理解,在C++中,<代码>返回null;
与相同,返回0代码>在指针的上下文中。显然,对于整数来说,情况并非如此,因为NULL不能被加、减等。有些人鼓励指针使用0而不是NULL,因为它更便于移植。我很好奇这是否是另一个等价的例子
我怀疑它们是等价的,因为返回
说的是return'nothing',NULL是'nothing'。但是,如果有人能够确认或否认这一点(当然,还有解释),我将非常感激 它的工作原理类似于void函数,其中返回将简单地退出函数,而不返回任何内容。这是一个问题。只有在构造函数或析构函数中声明函数为void
时,返回不带表达式的
才有效。如果您试图从返回int
、双精度等的函数中不返回任何内容,则您的程序将无法编译:
错误:返回“int”的函数中的返回语句没有值
根据C++11的§6.6.3/2:
既没有表达式也没有大括号init list的return语句只能在不返回值的函数中使用,即返回类型为void的函数、构造函数(12.1)或析构函数(12.4)
(感谢您的精彩评论)。return
,return 0
和return NULL
不一样
return
仅对返回void
的函数有效,例如:
void func(...);
return 0
用于返回某些int
类型的函数,例如:
unsigned long func(...);
Something *func(...);
尽管它也适用于浮点类型:
double func(...) { ... return 0; }
返回NULL
用于返回某些指针类型的函数,例如:
unsigned long func(...);
Something *func(...);
产生的机器代码存在差异:
return
只会将指令指针放回调用者的来源
return0
或returnnull
将0
放在堆栈上,然后将指令指针放回调用者的来源。(C,<代码> null <代码>通常映射到<代码> 0 <代码>,尽管在不同的实现中,它可能会(不同)不同。在C++中,<代码> null < /C>不应该被使用。
是返回
与相同,返回NULL?
没有
return
用于“中断”没有返回值的函数,即返回类型为void
return NULL
返回值NULL
,在其中找到的函数的返回类型必须与NULL
兼容
我理解,在C++中,<代码>返回null;
与相同,返回0代码>在指针的上下文中
有点NULL
可能不等同于0
,但它至少会转换为空值
显然,对于整数,情况并非如此,因为NULL不能被加、减等
您可以对指针执行加减运算。但是,NULL
必须具有整数类型(在C++03中为4.10/1和18.1/4),所以这是没有意义的NULL
很可能是扩展到0
或0UL
的宏
不过,一些现代编译器至少会警告您,如果它实际上是您编写的NULL
一些人鼓励指针使用0而不是NULL,因为它更便于移植。我很好奇这是否是另一个等价的例子
不,我不同意这个建议。虽然我可以看到它的来源,但是由于NULL
的确切定义在不同的实现中有所不同,当您切换到C++11时,使用NULL
将更容易替换为nullptr
,如果没有其他自文档的话
const testNullParity = () => {
return null
}
const testNullParity2 = () => {
return
}
console.log(testNullParity()) //null
console.log(testNullParity2()) //undefined
在javascript中,return是return undefined的缩写,因为null和undefined是两种不同的类型,但它们大致相同,即testNullParity()==testNullParity2()为true,但不是testNullParity2()===testNullParity2()您似乎混淆了很多东西…null
不是“无”,它是一个C宏,扩展为类似于0
(但不一定)的指针类型,并且不别名任何有效指针。C++等价的是 NulLPTR< /C>。特别是,空指针是指针类型的有效值。从站点上的空标签:“NULL意思是没有或未知(取决于上下文)”NULL不是C++中的“No.”。它只是一个宏(在
中定义),计算结果为number0
。但是它不是语言本身的一部分,它在C++中没有意义。参见C++ 11的第5.63/2页:“一个既没有表达式也没有支持的init列表的返回语句只能在不返回值的函数中使用,即,具有返回类型空格的函数、构造函数(12.1)或析构函数(12.4)。你的回答可能是我最大的疏忽。如果我的函数实际返回了一些东西,会发生什么?现在回想起来,我真不敢相信我能解释这种情况。另外,谢谢你的引用。+1建议使用0
而不是NULL
,但这并不是他对这个问题所说的全部:他还提到了在C++11:)中使用nullptr
)谢谢你的全面分析。我很抱歉,因为我弄糊涂了,但你的回答确实澄清了很多事情。@dasblinkenlight:Stroustroup说的并非每件事都必须是正确的!别忘了他首先负责C++。P@LightnessRacesinOrbit我希望这个网站有办法