2015-11-26 64 views
2

爲什麼編譯器不把return_nothing(return_nothing())當作return_nothing(); return_nothing();,因爲return_nothing()的返回類型是void爲什麼不能通過void來使用不帶參數的函數?

void return_nothing() {} 

int main() 
{  
    return_nothing(return_nothing()); // compile error 
} 

直播:因爲你是C++中的C++語言的編程和C++中的空隙返回函數不能有使用,你的編譯器(至少近似)所描述的Wanbox

+1

'void'不是一個值,而是一個類型。您也不能將'int'作爲參數。而'void'類型沒有可能的值。 – deviantfan

+0

我認爲它會把它當作'return_nothing(); return_nothing();'如果有的話,但你不能使用void返回值,你不能傳入一個void參數列表。我認爲這是「WTF你想要做什麼?」的理由。錯誤信息。 – user4581301

+0

'return_nothing'不需要任何參數,並且什麼都不返回,但它仍然是一些東西。因此,將某些參數作爲參數傳遞給不需要任何參數的東西就是編譯器錯誤。 – smac89

回答

3

按標準。

在C++中,沒有類型void的值。 void是沒有值的類型。

將函數void傳遞給函數是非法的,因爲函數會取值。

有一個小小的例外:如果你有一個返回void的操作,你可以從另一個void返回函數中返回return ooeratio_returning_void();。這是爲了使一些模板元編程更容易。

「將無效函數傳遞給沒有參數的函數」的問題有時候也是一個模板元編程問題,但這是一個非常罕見的問題。通常你只需要一點樣板就可以解決它。

+0

甚至沒有考慮模板的情況。好點子。 – user4581301

+2

返回類型爲'void'的表達式在返回類型爲(可能是cv-qualified)'void'的函數中總是合法的;不需要依賴類型或模板。 –

+0

@ t.c。真?我認爲這只是模板代碼。我想知道爲什麼? – Yakk

相關問題