что выбрать - CAtlString или std::string
От: agendus  
Дата: 21.08.09 11:49
Оценка:
Добрый день.
Эта тема создается как следствие вот этой здесь
Автор: agendus
Дата: 20.08.09
.

Работаю над проектом (ATL-service) в VC++ 2008. В вышеуказаной теме выбор был между C-строками и контейнерами STL. Однако ж сегодня я открыл для себя еще и существование CAtlString.
Вопрос к знатокам — что лучше работает? На одном из форумов наткнулся на откровенную ругань в адрес ATL-строк, правда ничем не обоснованную.
Re: что выбрать - CAtlString или std::string
От: Alexander G Украина  
Дата: 21.08.09 12:03
Оценка: 9 (4) +3 :)
Здравствуйте, agendus, Вы писали:

A>Работаю над проектом (ATL-service) в VC++ 2008. В вышеуказаной теме выбор был между C-строками и контейнерами STL. Однако ж сегодня я открыл для себя еще и существование CAtlString.

A>Вопрос к знатокам — что лучше работает? На одном из форумов наткнулся на откровенную ругань в адрес ATL-строк, правда ничем не обоснованную.

CAtlString:

1. Потокобезопасный подсчёт ссылок а не непонятно что (например оптимнизация малых строк).
2. CStrBuf — буфер для записи, например, из WinAPI функций. C std::string хоть создавай scoped_array и копируй из него в таких случаях.
3. MakeUpper/MakeLower
4. Перевод A <-> W через конструктор.
5. s[i] = 'x'; — не труъ. s.SetAt(i, 'x') рулит тем, что ссылку на результат [] не сохранишь.
6. Empty() — это глагол!
7. Длина — это GetLength(), а что такое size() — не очевидно.
8. Можно _tprintf(_T("%s"), s); — с CAtlString прокатит.

Минусуйте
Русский военный корабль идёт ко дну!
Re: что выбрать - CAtlString или std::string
От: BigBan Россия  
Дата: 21.08.09 13:31
Оценка:
Здравствуйте, agendus, Вы писали:

A>Вопрос к знатокам — что лучше работает? На одном из форумов наткнулся на откровенную ругань в адрес ATL-строк, правда ничем не обоснованную.


Работают они обе нормально, вообще если используете STL то и используйте их строки, если нет, то и CAtlString вполне подойдет.
Re[2]: что выбрать - CAtlString или std::string
От: pvirk Россия  
Дата: 21.08.09 15:56
Оценка: 9 (1)
Здравствуйте, Alexander G, Вы писали:

AG>7. Длина — это GetLength(), а что такое size() — не очевидно.

Можно не size(), можно length().
Re[3]: что выбрать - CAtlString или std::string
От: Alexander G Украина  
Дата: 21.08.09 17:16
Оценка: 1 (1)
Здравствуйте, pvirk, Вы писали:

AG>>7. Длина — это GetLength(), а что такое size() — не очевидно.

P>Можно не size(), можно length().

Можно. Но wstring::size() от этого не станет размером в байтах, он останется равен length(). Тех, кто не помнит, что wstring — это контейнер STL, этот факт может удивить
Русский военный корабль идёт ко дну!
Re[2]: что выбрать - CAtlString или std::string
От: Кодт Россия  
Дата: 22.08.09 08:53
Оценка: 9 (3) +1
Здравствуйте, BigBan, Вы писали:

BB>Работают они обе нормально, вообще если используете STL то и используйте их строки, если нет, то и CAtlString вполне подойдет.


А я предпочитаю использовать контейнеры STL и строки ATL. И даже засовывать ATLные строки в STLные контейнеры.
(А вот ATLные контейнеры — это отстой).

ATLные строки реально удобнее в большинстве случаев.
Даже если мне захочется итерировать по строке с помощью STLных алгоритмов — никаких проблем:
((LPCTSTR)s, (LPCTSTR)s+s.GetLength()).
Перекуём баги на фичи!
Re[4]: что выбрать - CAtlString или std::string
От: Кодт Россия  
Дата: 22.08.09 09:08
Оценка: 10 (2)
Здравствуйте, Alexander G, Вы писали:

AG>>>7. Длина — это GetLength(), а что такое size() — не очевидно.

P>>Можно не size(), можно length().

AG>Можно. Но wstring::size() от этого не станет размером в байтах, он останется равен length(). Тех, кто не помнит, что wstring — это контейнер STL, этот факт может удивить


Не понимаю, откуда вообще берутся мысли о байтах?! У всех контейнеров size — это размер в элементах.

Другое дело, что size строк (что STL, что ATL) исключает из внимания концевой ноль, ибо ваистену он находится за концом строки символов.

А вот length — это как раз неочевидно.
+ То ли строго равно size (непонятно только, зачем сделали два разных метода?),
— то ли до первого встреченного нуля (т.е. в соответствии с функцией strlen/wcslen, а то и mbslen...)
Перекуём баги на фичи!
Re[5]: что выбрать - CAtlString или std::string
От: Alexander G Украина  
Дата: 22.08.09 09:40
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Не понимаю, откуда вообще берутся мысли о байтах?!


UNICODE_STRING::Length, CComBSTR::ByteLength. Ну и из предположения, что т.к. имеются и length и size, они различаются.
Русский военный корабль идёт ко дну!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.