• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Co jest szybsze? Const char* czy std::string?

0 głosów
1,390 wizyt
pytanie zadane 13 października 2018 w C i C++ przez jegor377 Stary wyjadacz (13,230 p.)
Co pozwala na większą wydajność w aplikacji? Używanie const char* jako stringów czy std::string? Czy warto w ogóle używać const char* pod C++?

1 odpowiedź

+2 głosów
odpowiedź 13 października 2018 przez Bondrusiek Maniak (61,440 p.)
wybrane 13 października 2018 przez jegor377
 
Najlepsza
Witam,

wydaję mi się że większą wydajność uzyskasz używając const char* zamiast std::string. Za https://stackoverflow.com/questions/21946447/how-much-performance-difference-when-using-string-vs-char-array

Klasa std::string powstała po to aby ułatwić pracę z łańcuchami tekstowymi. Typ const char* jest dość problematyczny np na końcu łańcucha musisz dodać znak '\0' a klasa string w dużym stopniu ułatwia wykorzystywanie tekstu w aplikacji. Posiada wiele metod które umilają pracę więc w przypadku gdzie nie bardzo liczy się szybkość to lepiej jest wykorzystywać std::string.
komentarz 13 października 2018 przez jegor377 Stary wyjadacz (13,230 p.)
Robię sobie grę i się zastanawiałem czy pozamieniać const char* na stringi, bo trochę nieczytelne jest dla mnie strcmp() w porównaniu do zwykłego ==. Doszedłem do wniosku, że i tak nie będę zmieniał zawartości stringów co każdą klatkę w grze, więc lepiej jest użyć std::string. Dziękuję za szybką odpowiedź!:)
3
komentarz 13 października 2018 przez Arkadiusz Sikorski Pasjonat (20,160 p.)
Jeśli już piszesz w C++, to pisz po "ceplusplusowemu" i używaj std:string i operatora porównania, a nie archaicznego strcmp. Używanie std::string nie sprawi znacznych spadków wydajności, a na pewno pisanie kodu będzie przyjemniejsze.
1
komentarz 13 października 2018 przez j23 Mędrzec (195,240 p.)

@jegor377,   Wbrew pozorom c-stringi nie muszą być takie szybkie, jak się wydaje. W tym teście z SO wersja z char* ma jedną główną przewagę - nie traci czasu na (de)alokację pamięci. Łączenie dwóch std::stringów może być szybsze, bo oba obiekty zawierają informację o długości tekstu. W przypadku dwóch wskaźników trzeba by było wpierw użyć 2x strlen, żeby wyliczyć potrzebną ilość pamięci. Do składania łańcuchów znakowych lepiej użyć std::ostringstream.

Podobne pytania

0 głosów
4 odpowiedzi 3,060 wizyt
–2 głosów
1 odpowiedź 758 wizyt
pytanie zadane 22 sierpnia 2019 w C i C++ przez niezalogowany
0 głosów
2 odpowiedzi 900 wizyt

93,424 zapytań

142,421 odpowiedzi

322,643 komentarzy

62,782 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...