Posso tornare in funzione nulla?

Devo tornare al livello precedente della ricorsione. è la syntax come in basso a destra?

void f() { // some code here // return; } 

Sì, puoi tornare da una funzione di annullamento.

È interessante notare che puoi anche restituire il vuoto da una funzione di annullamento. Per esempio:

 void foo() { return void(); } 

Come previsto, questo è lo stesso di un semplice return; . Può sembrare esoterico, ma la ragione è per la coerenza dei modelli:

 template T default_value() { return T(); } 

Qui, default_value restituisce un object costruito di default di tipo T, e grazie alla possibilità di restituire void , funziona anche quando T = void .

Sicuro. Non dovresti restituire un valore reale.

Sì, questo ritornerà dalla funzione al livello precedente di ricorsione. Questa sarà una spiegazione molto semplice, ma quando chiami una funzione stai creando un nuovo stack di chiamate. In una funzione ricorsiva si sta semplicemente aggiungendo a tale stack di chiamate. Tornando da una funzione, indipendentemente dal fatto che si restituisca o meno un valore, si sposta nuovamente il puntatore dello stack sulla funzione precedente nello stack. È un po ‘come una pila di piatti. Continui a mettere delle piastre su di esso, ma piuttosto che tornare muove il piatto superiore.

Puoi anche verificarlo usando un debugger. Basta inserire alcuni punti di interruzione nel codice e attraversarlo. Puoi verificare che funzioni.

Sì, puoi usare quel codice per tornare dalla funzione. (Devo essere molto prolisso qui per far sì che Stack Overflow non dica che la mia risposta è troppo corta)

Non dovresti avere il ritorno lì, il programma tornerà alla funzione precedente da solo, passerà alla modalità di debug e passerà e potrai vederlo da solo. D’altra parte non penso che avere un ritorno ci danneggerà del tutto il programma.

La semplice risposta a questo è SÌ! C ++ riconosce il metodo void come una funzione senza restituzione. In pratica dice al compilatore che qualunque cosa accada, una volta che vedi il return; rompere e lasciare il metodo ….

Come tutti hanno detto, si puoi. In questo esempio, il reso non è necessario e serve in modo discutibile uno scopo. Penso che quello a cui ti riferisci sia un ritorno anticipato nel bel mezzo di una funzione. Puoi farlo anche se è una ctriggers pratica di programmazione perché porta a un stream di controllo complicato (non single-entry single-exit), insieme a dichiarazioni come break. Invece, salta il resto della funzione usando condizionali come if / else ().

Sì, a volte potresti voler restituire void () invece di solo nulla.

Considera una funzione di vuoto che desidera chiamare alcune funzioni del vuoto pass-through senza un gruppo di if-else.

 return InputEvent == E_Pressed ? Controller->Grip() : InputEvent == E_Released ? Controller->Release() : InputEvent == E_Touched ? Controller->Touch() : void();