Abbiamo avuto un bug nel nostro codice proveniente dalla lineaC++: avviso necessario per: unsigned int i = -1;
unsigned int i = -1;
Quando il codice è stato scritto originariamente, è stato i = 0
e quindi corretta. Usando -Wall -Wextra
, mi ha un po 'sorpreso che gcc non mi ha avvisato qui perché -1 non si adatta a un int unsigned.
Solo quando si accende -Wsign-conversion
questa riga diventa un avviso, ma con esso molti molti falsi positivi. Sto usando una libreria di terze parti che esegue operazioni di tipo array con int signed (anche se non possono essere < 0), quindi ogni volta che lo mesco con ad es. vettore, ottengo avvertimenti - e non vedo il punto di aggiungere milioni di caste (e anche le intestazioni di terze parti producono molti avvertimenti). Quindi sono troppi avvertimenti per me. Tutti questi avvertimenti sono che la conversione "può cambiare il segno". Va bene perché so che non succede in quasi tutti i casi.
Ma con l'assegnazione di cui sopra, ottengo lo stesso avviso "può cambiare". Questo non dovrebbe essere "cambierà sicuramente segno!" invece di "può cambiare"? C'è un modo per emettere avvisi solo per questi casi "cambieranno", non per i casi forse?
Anche il cambio di segno definito viene spesso utilizzato deliberatamente. Ad esempio, 'std :: string' ha' static const size_type npos = -1; '. – interjay
[-1 viene utilizzato con tipi senza segno] (http: // stackoverflow.it/q/22801069/1708801) poiché il suo risultato è ben definito dallo standard. –
utilizzando unsigned per assicurarti che la variabile non sia negativa è un altro errore: D –