C++ - sztuczki i niebezpieczeństwa
Poniżej trochę różnego rodzaju sugestii-notatek związanych z programowaniem w C++.
- Czytaj warningi czyli o obiektach tymczasowych
- Warto czytać ostrzeżenia wypisywane przez kompilator. Inaczej nasze zmienne mogą nie chcieć się zmieniać...
- Zmora zależności
- Warto unikać niepotrzebnego dołączania plików nagłówkowych.
- Ostrożnie z nazwami
- Kilka słów na temat konfliktów nazw.
- Używaj funkcji inline i stałych a nie makr
- Funkcja inline jest równie wydajna jak makro ale bezpieczniejsza.
- Korzystaj z STL
- Zachęta do używania STL.
- Jak opróżnić ostringstream
- Sposób na 'wyzerowanie' obiektu ostringstream.
- Z wydajnością biblioteki standardowej C++ bywa różnie
- Nie wszystkie implementacje biblioteki standardowej C++ są wydajne.
- Horror nazewniczy pod Windows
- Microsoft definiuje setki makr, niekiedy o bardzo narzucających się nazwach.
- Zawsze zapomnisz posprzątać, lepiej niech kompilator sprzątnie za Ciebie
- Zachęta do wykorzystywania sprytnych wskaźników
- Co ma wspólnego Oracle z numeric_limits
- Pliki nagłówkowe Oracle definiują kilka bardzo dziwnych makr.
- Ostrożnie z c_str na obiekcie tymczasowym
- Metoda c_str zawołana na obiekcie tymczasowym zwraca wskaźnik do pamięci, ktora już po chwili może być używana do czego innego.
- String i vector nie chcą oddać pamięci
- Jak zmusić string lub vector, by zwrócił zaalokowaną pamięć.
- Ryzykowne słowo exception
- Zamiast exception lepiej pisać std::exception.
- Rzutowanie typów całkowitych wymaga dyscypliny
- Problemy przy rzutowaniu pomiędzy typami całkowitymi.
- Uwaga z ciągami zapisów do strumienia
- Polecenia zapisu do strumienia wykonuje się niekiedy w zupełnie innej kolejności, niż mogłoby się to wydawać.
- Nie używaj funkcji isspace
- Funkcja isspace zwraca czasem wartości bardzo nieoczekiwane.
- Metody statyczne bywają mylące
- Czasem trudno zauważyć, że używamy metody statycznej.
- Microsoft + template + DLL = kłopoty
- Microsoft+DLL+template=gwałt pamięci.
- Jak odróżnić platformę kompilacji
- O odróżnianiu platformy kompilacji
- Strumienie w GCC nie lubią setw dla obiektów string
- Problem z setw w GNU C++
- Ostrożnie z konstruktorem std::string
- string(0) może być niebezpieczny
- Mądre przerzucanie wyjątków
- Jak rzucić dalej złapany wyjątek.
- Nie używaj unsigned jako indeksu string-a
- string::size_type to nie musi być unsigned!
- Ostrożnie z dodawaniem stringów
- Ostrożnie z arytmetyką na const char *!
- Kilka wartościowych książek
- Kilka wartościowych choć trudnych książek o C++
- Loteria typów
- Kompilator może rzutować w sposób zupełnie dla nas nieoczekiwany.
- Nie używaj wyjątków w destruktorze
- Rzucenie wyjątku przez destruktor może nam sprawić sporo problemów.
- Nie wpisuj znaku backspace do stringów
- Znaki specjalne w stringu mogą wiele przed nami ukryć.
- Ostrożnie z catch(...)
- Ostrzeżenie przed wykorzystywaniem catch(...)