Se s[s.size()]=='\0'
, allora è conveniente trattarlo come una sentinella per qualche algoritmo. Ho fatto un test ed è sempre uguale a '\0'
, ma alcuni libri dicono che è illegale accedere a s[s.size()]
.Per una stringa C++, è s [s.size()] legale e sempre uguale a ' 0'?
5
A
risposta
9
Sì, che darà un riferimento a un carattere zero-valore, come specificato dallo standard C++ 11:
Richiede:
pos <= size()
.Reso:
*(begin() + pos)
sepos < size()
, tuttavia un riferimento a un oggetto di tipoT
con valorecharT()
; il valore di riferimento non deve essere modificato.
dove charT()
è un valore costruito carattere, che avrà il valore zero. T
è presumibilmente un errore di battitura per charT
. La bozza del C++ 14 (e presumibilmente lo standard finale) dice la stessa cosa, con l'errore di battitura corretto.
Se hai un libro che dice il contrario, masterizzalo o vendilo ai tuoi nemici.
Problemi correlati
- 1. È un conformant di implementazione std :: string dove 's.c_str() + s.size()' non è necessariamente uguale a '& s [s.size()]'?
- 2. string s; &s+1; Legale? UB?
- 3. "& s [0]" punta a caratteri contigui in una stringa: std ::?
- 4. È per ({istruzioni;}; condizione; {istruzioni;}) legale C?
- 5. Indicizzazione stringa - Perché S [0] [0] funziona e S [1] [1] fallisce?
- 6. $ PROGRAM_NAME è uguale a $ 0 in ruby?
- 7. == rispetto è uguale a C#
- 8. Perché l'aggiunta di null a una stringa è legale?
- 9. indexPath.row è sempre 0
- 10. php non è uguale a non è uguale, uguale a
- 11. È legale ridefinire una parola chiave C++?
- 12. è std :: vector :: reserve (0); legale?
- 13. La stringa non è uguale alla stringa?
- 14. Gli interi sono sempre inizializzati a 0?
- 15. if-statement sempre uguale a TRUE
- 16. Utilizzo di NSPredicate per determinare se una stringa è uguale a un'altra stringa
- 17. È legale l'ottimizzazione C++ 0x?
- 18. perché una stringa vuota può produrre indice 0 elemento in C++
- 19. È "a +++ i" uguale a "(a ++) + i" in C
- 20. Verificare se una stringa è uguale a una delle stringhe (con espressioni regolari)
- 21. Java è uguale a una classe. == uguale a .equals
- 22. È delete [] uguale a per elemento delete. C++
- 23. In C/C++ è x [i] * y [i ++] sempre uguale a x [i] * y [i]
- 24. JS: verifica l'esistenza di una var uguale a 0
- 25. Perché questa auto aggiunta è uguale a 0?
- 26. Event.currentTarget è sempre uguale a $ (this) in jQuery?
- 27. Questa istruzione macro è legale in C++ o qualcos'altro? E se è legale come funziona
- 28. Come verificare se una variabile è uguale a una stringa o un'altra stringa?
- 29. cmd msbuild errorlevel è sempre 0
- 30. Java è uguale a() ordinare
In C++, solo perché qualcosa funziona, non significa che sia legale. – immibis