簡體   English   中英

在 C++ 中,是“返回;” 和“return NULL;”一樣嗎?

[英]In C++, is “return;” the same thing as “return NULL;”?

我的問題是return; return NULL;相同return NULL; 在 C++ 中?

我知道在 C++ 中, return NULL; return 0;相同return 0; 在指針的上下文中。 顯然,對於整數,情況並非如此,因為 NULL 不能加、減等。而且有些人鼓勵使用 0 而不是 NULL 作為指針,因為這樣更便於移植。 我很好奇這是否是發生等價的另一個實例。

我懷疑它們是等價的,因為return; 是說 return 'nothing' 和 NULL 是'nothing'。 但是,如果有人可以確認或否認這一點(當然有解釋),我將不勝感激!

return; return NULL;相同return NULL; 在 C++ 中?

不。

return用於從沒有返回值的函數中“中斷”,即返回類型void

return NULL返回值NULL ,並且它所在的函數的返回類型必須與NULL兼容。


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

有點。 NULL可能不等於0 ,但它至少會轉換成這樣。


顯然,對於整數,情況並非如此,因為 NULL 不能加、減等。

您可以很好地對指針執行加法和減法。 但是,無論如何, NULL必須具有整數類型(C++03 中的 4.10/1 和 18.1/4),因此沒有實際意義。 NULL很可能是一個擴展為00UL的宏。

不過,一些現代編譯器至少會警告您,如果它實際上是您編寫的NULL


並且有些人鼓勵使用 0 而不是 NULL 作為指針,因為它更便於移植。 我很好奇這是否是發生等價的另一個實例。

不,我不同意這個建議。 雖然我能看到它是從,既然來了NULL的確切定義在不同的實現而不同,使用NULL將使它容易與替代nullptr當您切換到C ++ 11,如果不出意外是自文檔。

僅當您的函數在構造函數或析構函數中聲明為void ,不帶表達式的return才有效。 如果您嘗試從返回intdouble等的函數中不返回任何內容,您的程序將無法編譯:

錯誤:沒有值的返回語句,在返回“int”的函數中

根據 C++11 的第 6.6.3/2 節:

既沒有表達式也沒有花括號初始化列表的 return 語句只能用於不返回值的函數,即返回類型為 void、構造函數 (12.1) 或析構函數 (12.4) 的函數.

(感謝 sftrabbit 的精彩評論)。

return , return 0return NULL一樣的。

return僅對返回void函數有效,例如:

void func(...);

return 0用於返回一些int類型的函數,例如:

unsigned long func(...);

雖然它也適用於浮點類型:

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

return NULL用於返回某些pointer類型的函數,例如:

Something *func(...);

它的工作方式類似於 void 函數,其中 return 將簡單地退出函數並且不返回任何內容。 這已經被問過了

生成的機器代碼存在差異:

return只會將指令指針放回調用者所在的位置。

return 0return 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM