Я считаю, что первый метод наиболее удобен, поскольку он поддерживает несколько методов и имеет перегруженные операторы.
Верно. И это должен быть способ по умолчанию для обработки строк в C ++.
Но я считаю, что это также делает его наименее оптимизированным с точки зрения производительности, не так ли?
Наименее оптимизирован? За что? Что касается обычного приложения, то std::string
- это очень быстро. Он сильно оптимизирован для многих сценариев использования. Большое количество очень умных людей очень много работают, чтобы сделать это быстро. Взгляните на этот SO вопрос , где кто-то пытается реализовать одну из std::string
операций самостоятельно, но не может превзойти std::string
производительность.
Какой метод лучше по производительности / скорости?
std::string
самый быстрый. Прежде чем сказать, что это не так, подумайте, как вы собираетесь использовать свои струны. Вы делаете что-либо из следующего?
- Сравнение
- Конкатенация
- Передача строк в функциях
- поиск
std::string
может сделать все это очень быстро. Однако, если вы в конечном итоге используете const char*
или массив символов, вам придется выполнять эти операции вручную , что почти наверняка будет медленнее , чем реализация std::string
. Не говоря уже о различных проблемах с указателями и памятью, с которыми вам придется столкнуться.
Какие из них размещены в стеке, а какие в куче? Я имею в виду, что я не вижу никаких новых ключевых слов, но моя интуиция говорит об обратном.
Все строки, которые вы показали, находятся в стеке, даже std::string
. std::string
имеет встроенный SSO (оптимизация коротких строк), который сохраняет короткие строки в стеке.