z nich jest większy. Patrząc na kod, widzimy, że przy operatorze porównania (==) wywołuje się funkcję strcmp w celu sprawdzenia, czy oba napisy są równe. Funkcję tę wywołuje się również w wypadku operatora < do sprawdzenia, który z napisów jest większy. Dlatego też w sytuacji, w której napisy nie są sobie równe, funkcja strcmp zostaje wywołana dwukrotnie (raz dla operatora = i raz dla operatora <).
I co z tego? Otóż funkcja strcmp zwraca zero, liczbę ujemną albo liczbę dodatnią, jednoznacznie pokazując, w jakiej relacji są porównywane wartości. Można zatem wykryć, jak mają się do siebie napisy napisl i napis2 za pomocą jednego tylko wywołania funkcji strcmp, a nie dwóch. Pokazany kod jest zrozumiały i czytelny, ale nie tak wydajny, jak mógłby być.
Przykład: TestStringClass() w pliku String.cpp
106
unikanie awarii; unikanie nieoczekiwanych wyników
Przed
Napis &operator+(const Napis&napis) const
Napis napisNowy(m_pch);
napisNowy.Dołącz(napis.m_pch, napis.m_cch); return napisNowy;
Po
Napis operator+(const Napis&napis) const
Napis napisNowy(m_pch);
napisNowy.Dołącz(napis.m_pch, napis.m_cch); return napisNowy;
Zauważmy drobną różnicę między fragmentami „Przed” i „Po”. Operator we fragmencie „Przed” zwraca odwołanie do Napis. Operator we fragmencie „Po” zwraca kopię Napis.
Ponieważ pamięć dla zmiennej napisNowy jest przydzielana na stosie, operator w pierwszym kodzie zwraca odwołanie do zmiennej na stosie. Zmienna ta zostanie usunięta po utracie zasięgu przez operator, co może doprowadzić do powstania błęd-