std :: string или std :: wstring, в зависимости от ваших потребностей. Почему?
- Они стандартные
- Они портативные
- Они могут обращаться с I18N
- Они имеют гарантии производительности (согласно стандарту)
- Защищено от переполнения буфера и подобных атак
- При необходимости легко преобразуются в другие типы
- Имеет красивый шаблон, предоставляя вам широкий выбор опций, одновременно уменьшая объем кода и повышая производительность. В самом деле. Компиляторы, которые не могут обрабатывать шаблоны, давно исчезли.
Массив символов в стиле C просто напрашивается на неприятности. Вам все равно придется иметь дело с ними время от времени (и именно для этого предназначена std :: string.c_str ()), но, честно говоря, одной из самых больших опасностей в C являются программисты, которые делают плохие вещи с помощью char * и заканчивают работу с переполнением буфера. Только не делай этого.
Массив wchar__t - это то же самое, только больше.
CString, BSTR и CComBSTR не являются стандартными и не переносимыми. Избегайте их, если не будете абсолютно вынуждены. Оптимально, просто конвертировать в них std :: string / std :: wstring, когда это необходимо, что не должно быть очень дорого.
Обратите внимание, что std :: string - это просто потомок std :: basic_string, но вам все равно лучше использовать std :: string, если у вас нет веских причин не делать этого. Действительно хорошо. Пусть компилятор позаботится об оптимизации в этой ситуации.