• 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?

Object Storage Arubacloud
0 głosów
1,143 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,370 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 (194,920 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 2,415 wizyt
–2 głosów
1 odpowiedź 453 wizyt
pytanie zadane 22 sierpnia 2019 w C i C++ przez niezalogowany
0 głosów
2 odpowiedzi 545 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...