Cosa usano le persone per indicare che size_t non è valido? -1 non funziona e 0 può essere una dimensione valida.Valore non valido per size_t
risposta
Forse ((size_t)-1)
?
A rigor di termini, si è una dimensione valida, ma una volta che hai questo uno non siete probabilmente bisogno di qualsiasi altro ;-)
alcune delle funzioni di stringa multiby C99 fanno questo: restituiscono '(size_t) (- 1)' o anche '(size_t) (- 2)' per indicare condizioni anormali; non è ottimale, ma funziona nella pratica; se la ragione della tua domanda è la gestione degli errori, potrebbe essere una buona idea passare un puntatore a una variabile di errore (ad esempio un flag di errore di tipo '_Bool', un codice di errore di tipo' int' o un messaggio di errore di tipo ' const char * ') come argomento aggiuntivo – Christoph
Sì, è un idioma comune. Spesso puoi vedere anche il '(time_t) -1'. –
@ MichaelKrelin-hacker: '(time_t) -1' è un po 'diverso; lo standard dice esplicitamente che è il valore restituito da 'time()' se non è possibile determinare l'ora corrente. E 'time_t' è spesso un tipo firmato, quindi' (time_t) -1' è tipicamente 1 secondo prima dell'epoca. –
Fondamentalmente non è possibile. Qualunque valore tu usi potrebbe essere valido. Meglio passare una bandiera dicendo che non è valido.
E cosa fare per indicare che un int
non è valido? -1 è un valore valido per un int. Questi tipi non hanno valori "non validi" designati. Puoi decidere di scegliere un determinato valore (che non può mai essere normalmente il valore di ciò che rappresenta la tua variabile) per rappresentare un valore illegale, ma questa è la tua definizione, e non qualcosa che le persone generalmente usano.
Personalmente, non mi piace in questo modo. Preferisco creare un'altra variabile, bool IsValid
, che dirà se il valore di tale variabile size_t è valido. A volte, potrebbe anche essere meglio creare una classe per incapsularli.
Se stai parlando di std :: string, il valore non valido di size_t è std :: string :: npos. Normalmente non dovresti usare -1 perché un size_t non è firmato, e puoi ottenere confronti non riusciti su un compilatore che fa conversioni implicite tra tipi.
Detto questo, std :: strings's npos è impostato su 0XFFFFFFFFFFFFFFFFFF ... che è il binario equivallent di -1. Valuta anche il valore massimo consentito per un campo size_t senza segno.
è 'string :: size_type', non' size_t' ;-) –
Ancora ... il resto della risposta è d'oro massiccio ORO SOLIDO! – Kieveli
Almeno brilla ;-) –
La mia versione è:
#include <limits>
#define invalid_index std::numeric_limits<size_t>::max()
'std :: numeric_limits
- 1. Valore predefinito non valido per "dateAdded"
- 2. C size_t e ssize_t valore negativo
- 3. printf per size_t
- 4. DataGridViewComboBoxCell ATTACCO - "il valore non è valido"
- 5. ERRORE ITMS-90542: "Valore CFBundleSupportedPlatforms non valido."
- 6. numpy: valore non valido rilevato in true_divide
- 7. java.lang.IllegalArgumentException: direttiva di pagina: valore non valido per l'importazione
- 8. SAXParseException: value non è un valore valido per 'date'
- 9. InvalidArgument = Il valore di '0' non è valido per 'SelectedIndex'
- 10. svg valore non valido per <path>
- 11. errore 1067 (42000): valore di default non valido per 'created_at'
- 12. Valore non valido per la proprietà <position>
- 13. Valore non valido per il percorso di matrice dello schema
- 14. prcomp e ggbiplot: valore "rot" non valido
- 15. Perché 'Esporta valore predefinito' non è valido?
- 16. RuntimeWarning: valore non valido rilevato nel massimo
- 17. Uso non valido del valore nullo
- 18. Il valore "(stringa)" non è valido
- 19. Trasmetti da size_t a int o iterazione con size_t?
- 20. Modo corretto per il marshall SIZE_T *?
- 21. std :: size_t vs size_t vs std :: string :: size_type
- 22. size_t vs. uintptr_t
- 23. Fusioni ssize_t o size_t
- 24. 'size_t' vs 'container :: size_type'
- 25. FFI: Come dichiarare `size_t`
- 26. confrontando int con size_t
- 27. css3 webkit transition trasformare translate: valore di proprietà non valido?
- 28. pacchetto wordcloud: ottieni "Errore in strwidth (...): valore 'cex' non valido"
- 29. 'valore non valido rilevato nell'avviso double_scalars', probabilmente numpy
- 30. "(valore non valido in tutto il carattere 0.) AFNetworking
Come si fa a -1 "non funziona"? –
Personalmente, mi rifiuto di usare sistemi non POSIX e mi affido che 'ssize_t' sia disponibile. –