Qual è la differenza tra string.c_str () e & string [0]?

3

Quali sono le differenze tra string.c_str() e &string[0] ?

Per quanto riguarda le prestazioni, la mia ipotesi è che &string[0] sia un po 'più veloce di string.c_str () in quanto non richiede una chiamata di funzione.

Per quanto riguarda la sicurezza e la stabilità, il buon senso mi dice che string.c_str() dovrebbe avere alcuni controlli implementati, ma non lo so, è per quello che sto chiedendo.

    
posta Stefan Rogin 19.11.2013 - 14:13
fonte

1 risposta

8

In C ++ 98 non si garantisce che l'array interno sia terminato con null; in altre parole string.data()[string.size()] ha come risultato un comportamento indefinito. L'implementazione quindi rialloca l'array con la terminazione null quando viene chiamato c_str() , ma può lasciare spento il terminatore nullo quando non lo è.

Questo significa anche che &string[0] non è garantito che sia terminato con null (è essenzialmente una deviazione a data() )

In C ++ 11 la garanzia di terminazione nulla viene specificata in modo che string.data()==string.c_str() sia sempre valido.

    
risposta data 19.11.2013 - 14:43
fonte

Leggi altre domande sui tag