[英]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
很可能是一個擴展為0
或0UL
的宏。
不過,一些現代編譯器至少會警告您,如果它實際上是您編寫的NULL
。
並且有些人鼓勵使用 0 而不是 NULL 作為指針,因為它更便於移植。 我很好奇這是否是發生等價的另一個實例。
不,我不同意這個建議。 雖然我能看到它是從,既然來了NULL
的確切定義在不同的實現而不同,使用NULL
將使它更容易與替代nullptr
當您切換到C ++ 11,如果不出意外是自文檔。
僅當您的函數在構造函數或析構函數中聲明為void
,不帶表達式的return
才有效。 如果您嘗試從返回int
、 double
等的函數中不返回任何內容,您的程序將無法編譯:
錯誤:沒有值的返回語句,在返回“int”的函數中
根據 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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.