std :: string или std :: wstring, в зависимости от ваших потребностей. Зачем?
- Они стандарт
- Они портативные
- Они могут обрабатывать I18N
- Они имеют гарантии исполнения (по стандарту)
- Защита от переполнения буфера и других подобных атак
- Легко конвертируются в другие типы по мере необходимости
- Красиво оформлены шаблоны, предоставляя вам широкий выбор вариантов, одновременно уменьшая раздувание кода и улучшая представление. В самом деле. Компиляторы, которые не могут обрабатывать шаблоны, уже давно ушли.
C-style массив символов просто требует неприятностей. Вам по-прежнему придется иметь дело с ними по случаю (и это то, что для std :: string.c_str()), но, честно говоря, одна из самых больших опасностей в C - это программисты, делающие Bad Things с char * и завершающие с переполнением буфера. Только не делай этого.
Массив wchar__t - это то же самое, только больше.
CString, BSTR и CComBSTR не являются стандартными и не переносимыми. Избегайте их, если они не будут абсолютно принудительными. Оптимально, просто конвертируйте std :: string/std :: wstring в них, когда это необходимо, что не должно быть очень дорого.
Обратите внимание, что std :: string - это всего лишь ребенок из std :: basic_string, но вам все равно лучше использовать std :: string, если у вас нет по-настоящему уважительной причины. Действительно хорошо. Пусть компилятор позаботится об оптимизации в этой ситуации.
Пожалуйста, прочтите FAQ http://stackoverflow.com/faq Ra. Это отличный пример открытого вопроса, который требует большого обсуждения. Downvoted. – 2008-09-25 13:44:27
Я не согласен с Onorio - это отличный вопрос для тех, кто не знает, какую систему строк использовать для всех вариантов. Активировано, чтобы отменить Onvio's downvote :) – 2008-09-25 15:43:20
Вы должны указать, ищете ли вы многоплатформенное решение или только конкретный Windows. Это очень важно. – sorin 2010-01-10 17:08:29