Podręcznik
Wersja podręcznika: 1.0
Data publikacji: 01.01.2022 r.
5. Typy złożone
5.2. Napisy
W C++ podstawowym typem napisowym jest string, tyle że nie jest to część języka, lecz jeden z kontenerów z biblioteki STL. W starym C wbudowanego typu napisowego w ogóle nie było - napisy były przechowywane i przetwarzane jako tablica o elementach typu char. Dzięki temu tablicę taką możemy inicjalizować stałą napisową:
char napis[20] = "Lolek"; // równoważne { 'L','o','l','e','k','\0' }
Zwróćcie uwagę na ostatni znak w tablicy – zawsze powinien być to znak o kodzie 0, podany jawnie lub niejawnie. Takie podejście jest istotą tak zwanych "null-terminated strings" – techniki bardzo niewygodnej, lecz przez tak długi czas będącej standardem, że nie można jej pominąć do dziś.
Wymieńmy niedogodności:
- skoro nie można bezpośrednio kopiować tablic, to nie można także bezpośrednio kopiować napisów,
- nie można ich porównywać (w większości innych języków istnieje domyślny operator dokonujący porównania leksykalnego),
- nie ma także domyślnego działania operatora dodawania, który powinien łączyć napisy,
- do tablicy musimy wpisywać napisy literka po literce (używa się do tego odpowiednich funkcji, pochodzących z biblioteki standardowej C, co nie zmienia braku naturalności takiego podejścia),
- często też powstają problemy z terminatorem napisu – znakiem o kodzie 0. Wstawienie go wewnątrz napisu powodowało skrócenie go do miejsca gdzie było wstawione 0.
Wszystkich wspomnianych wad pozbawiony jest typ string – lecz jak wspomnieliśmy – nie jest możliwe zupełne pominięcie go, choćby dlatego, że literały napisowe są zamieniane na stałe „null-terminated strings”