Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C++;,是";返回&引用;与“相同的事情”;返回NULL&引用;?_C++_Null_Return - Fatal编程技术网

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.”。它只是一个宏(在
中定义),计算结果为number
0
。但是它不是语言本身的一部分,它在C++中没有意义。参见C++ 11的第5.63/2页:“一个既没有表达式也没有支持的init列表的返回语句只能在不返回值的函数中使用,即,具有返回类型空格的函数、构造函数(12.1)或析构函数(12.4)。你的回答可能是我最大的疏忽。如果我的函数实际返回了一些东西,会发生什么?现在回想起来,我真不敢相信我能解释这种情况。另外,谢谢你的引用。+1建议使用
0
而不是
NULL
,但这并不是他对这个问题所说的全部:他还提到了在C++11:)中使用
nullptr
)谢谢你的全面分析。我很抱歉,因为我弄糊涂了,但你的回答确实澄清了很多事情。@dasblinkenlight:Stroustroup说的并非每件事都必须是正确的!别忘了他首先负责C++。P@LightnessRacesinOrbit我希望这个网站有办法