Una dichiarazione spesso usato come (void)x;
permette di sopprimere gli avvertimenti circa variabile inutilizzata x
. Ma se provo compilando il seguente, ho alcuni risultati che non capisco:Cosa colata a `void` davvero fare?
int main()
{
int x;
(short)x;
(void)x;
(int)x;
}
compilazione questo con g ++, ottengo le seguenti avvertenze:
$ g++ test.cpp -Wall -Wextra -o test
test.cpp: In function ‘int main()’:
test.cpp:4:13: warning: statement has no effect [-Wunused-value]
(short)x;
^
test.cpp:6:11: warning: statement has no effect [-Wunused-value]
(int)x;
^
Quindi concludo che la fusione a void
è molto diverso da colata di qualsiasi altro tipo, tramite il tipo di destinazione uguale decltype(x)
o qualcosa di diverso. La mia ipotesi a possibili spiegazioni è:
- è solo una convenzione che
(void)x;
ma non gli altri calchi saranno sopprimere avvertimenti. Tutte le dichiarazioni ugualmente non hanno alcun effetto. - Questa differenza è in qualche modo legato al fatto che
void x;
non è una dichiarazione valida fino ad esaurimentoshort x;
è.
Quale di questi, se c'è ne è più corretto? Se nessuno, come può essere spiegata la differenza negli avvisi del compilatore?
E 'solo una convenzione tra i compilatori che questo cast sopprime avvertimenti. Lo standard C++ non menziona gli avvertimenti per "la dichiarazione non ha alcun effetto". –