Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чем отличается std::wstring от std::string? 
V
    Опции темы
Alca
Дата 28.10.2008, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Чем отличается std::wstring от std::string?


--------------------
PM WWW ICQ Skype Jabber   Вверх
Alek86
Дата 28.10.2008, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



первое - строки 2х-байтных символов
второе - однобайтных


--------------------
user posted image    user posted image
PM MAIL   Вверх
Alca
Дата 28.10.2008, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Цитата

2-x байтовые

Это типа юникод или как?


--------------------
PM WWW ICQ Skype Jabber   Вверх
Alek86
Дата 28.10.2008, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



1 из его видов

Добавлено через 51 секунду
кстати, в wchar_t не обязательно именно 2 байта. но если ты пишешь только под винду, то можно считать, что 2


--------------------
user posted image    user posted image
PM MAIL   Вверх
Alca
Дата 28.10.2008, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Спасиб.


--------------------
PM WWW ICQ Skype Jabber   Вверх
J0ker
Дата 28.10.2008, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(Alek86 @  28.10.2008,  10:16 Найти цитируемый пост)
первое - строки 2х-байтных символов

не 2х-байтных, а wchar_t
wchar_t стандартом не специфицирован - на gcc например он 4-х байтный


--------------------
user posted image
PM MAIL   Вверх
Alek86
Дата 28.10.2008, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(J0ker @  28.10.2008,  18:35 Найти цитируемый пост)
не 2х-байтных, а wchar_t

Цитата(Alek86 @  28.10.2008,  10:29 Найти цитируемый пост)
кстати, в wchar_t не обязательно именно 2 байта. но если ты пишешь только под винду, то можно считать, что 2



Это сообщение отредактировал(а) Alek86 - 28.10.2008, 22:53


--------------------
user posted image    user posted image
PM MAIL   Вверх
Alca
Дата 1.11.2008, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



В каких случаях может пригодиться std::wstring?
В каких случаях используется? 

Это сообщение отредактировал(а) Alca - 1.11.2008, 14:39


--------------------
PM WWW ICQ Skype Jabber   Вверх
HappyLife
Дата 1.11.2008, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: 3
Всего: 8



Alca, Вместо std::string, если ты пишеш программу с юникодным шрифтом.
PM MAIL   Вверх
Alca
Дата 2.11.2008, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Спасибо.

Это сообщение отредактировал(а) Alca - 28.11.2008, 18:28


--------------------
PM WWW ICQ Skype Jabber   Вверх
Alca
Дата 28.11.2008, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Зачем использовать std::string (какой сенс), если есть std::wstring?


--------------------
PM WWW ICQ Skype Jabber   Вверх
JackYF
Дата 28.11.2008, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Alca @  28.11.2008,  17:28 Найти цитируемый пост)
если есть std::wstring? 

Скорость, размер.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Alca
Дата 28.11.2008, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Коротко и ясно, спасибо.


--------------------
PM WWW ICQ Skype Jabber   Вверх
586
Дата 28.11.2008, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 10
Всего: 146



Цитата(Alca @  28.10.2008,  10:13 Найти цитируемый пост)
Чем отличается std::wstring от std::string? 

вот чем:
Код
typedef basic_string<char, char_traits<char>, allocator<char> > string;
typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > wstring;

PM   Вверх
J0ker
Дата 28.11.2008, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(JackYF @ 28.11.2008,  18:43)
Цитата(Alca @  28.11.2008,  17:28 Найти цитируемый пост)
если есть std::wstring? 

Скорость, размер.

это-то тут при чем?


--------------------
user posted image
PM MAIL   Вверх
JackYF
Дата 28.11.2008, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(J0ker @  28.11.2008,  19:54 Найти цитируемый пост)
это-то тут при чем? 

Как это при чём? Ты действительно считаешь, что скорость обработки и размер ОЗУ для хранения двух-и-более-байтовых символов аналогичны этим же показателям для однобайтовых?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
J0ker
Дата 28.11.2008, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(JackYF @ 28.11.2008,  21:41)
Цитата(J0ker @  28.11.2008,  19:54 Найти цитируемый пост)
это-то тут при чем? 

Как это при чём? Ты действительно считаешь, что скорость обработки и размер ОЗУ для хранения двух-и-более-байтовых символов аналогичны этим же показателям для однобайтовых?

я действительно считаю что это лишь оооооочень слабое следствие, причем весьма спорное и отношения к делу не имеющее
юникод нужен для унификации кодировок различных языков, а ANSI набор нужен как минимум для обратной совместимости и для приложений не нуждающихся в поддержки различных языков


--------------------
user posted image
PM MAIL   Вверх
Kallikanzarid
Дата 29.11.2008, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 9.11.2008

Репутация: нет
Всего: 3



Цитата

Как это при чём? Ты действительно считаешь, что скорость обработки и размер ОЗУ для хранения двух-и-более-байтовых символов аналогичны этим же показателям для однобайтовых?

Methinks это имеет значение, только если твоя программа занимается в основном обработкой строк.
PM MAIL   Вверх
Alca
Дата 29.11.2008, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Цитата

это-то тут при чем?

При том что размер wchar_t в двое больше размера char.


--------------------
PM WWW ICQ Skype Jabber   Вверх
J0ker
Дата 29.11.2008, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(Alca @ 29.11.2008,  13:13)
Цитата

это-то тут при чем?

При том что размер wchar_t в двое больше размера char.

ну иногда и вчеверо
и что из этого?
я не думаю что десятые доли процента производительности в среднестатистическом приложении играют какую-то роль - это во-первых
во-вторых, складывается впечатление, что сначала были wchar_t, а потом, чтобы ускорить, придумали char
было как раз наоборот, и причины были несколько другие
а нам в ответ на то, зачем нужны char и wchar_t канифолят мозги про какие-то размер и производительность
бредить изволите, господа  smile 

Это сообщение отредактировал(а) J0ker - 29.11.2008, 19:03


--------------------
user posted image
PM MAIL   Вверх
MAKCim
Дата 29.11.2008, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



J0ker
 smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
MAKCim
Дата 29.11.2008, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



вообще ради интереса можно запустить следующую программу
Код

#include <sys/time.h>
#include <wchar.h>
#include <stdio.h>
#include <string.h>

static volatile wchar_t ws1[] = L"0123456789abcdefghijklmnopqrstuvwxyz";
static volatile wchar_t ws2[] = L"0123456789abcdefghijklmnopqrstuvwxyz";

static volatile char s1[] = "0123456789abcdefghijklmnopqrstuvwxyz";
static volatile char s2[] = "0123456789abcdefghijklmnopqrstuvwxyz";

#define tv2ms(tv) ((tv)->tv_sec * 1000 + (tv)->tv_usec / 1000)

int main()
{
    struct timeval start, stop;
    int i, r;
    gettimeofday(&start, NULL);
    for (i = 0, r = 0; i < 0x10000000; ++i) {
        r += wcscmp((const wchar_t*)s1, (const wchar_t*)s2);
    }
    gettimeofday(&stop, NULL);
    printf("wchar_t: miliseconds [%lu]\n", (unsigned long)tv2ms(&stop) - tv2ms(&start));
    gettimeofday(&start, NULL);
    for (i = 0, r = 0; i < 0x10000000; ++i) {
        r += strcmp((const char*)s1, (const char*)s2);
    }
    gettimeofday(&stop, NULL);
    printf("char: miliseconds [%lu]\n", (unsigned long)tv2ms(&stop) - tv2ms(&start));
    return 0;
}

результаты несколько неожиданные


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
J0ker
Дата 29.11.2008, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(MAKCim @  29.11.2008,  19:37 Найти цитируемый пост)
результаты несколько неожиданные 

неожиданные для тех, кто думает, что сравнение строк == сравнение байтов
на самом деле существует такое понятие как collation
 smile 


--------------------
user posted image
PM MAIL   Вверх
MAKCim
Дата 30.11.2008, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



J0ker
это понятно
неожиданно то, что разница почти в _два_ раза


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
J0ker
Дата 30.11.2008, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(MAKCim @ 30.11.2008,  11:07)
J0ker
это понятно
неожиданно то, что разница почти в _два_ раза

у меня все нормально
Код

wchar_t: [4296]
char: [4266]

Код

wchar_t: [4234]
char: [4266]

количество увеличено в 16 раз, вместо gettimeofday - clock

Это сообщение отредактировал(а) J0ker - 30.11.2008, 19:11


--------------------
user posted image
PM MAIL   Вверх
MAKCim
Дата 1.12.2008, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



J0ker
clock() менее точен
по крайней мере в Linux он использует значение utime для процесса, а оно имеет латентность 1/HZ

через clock() аналогичная ситуация
на чем тестил? (ОС, компилятор)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Mayk
Дата 1.12.2008, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(MAKCim @  30.11.2008,  15:07 Найти цитируемый пост)
J0ker, 
это понятно
неожиданно то, что разница почти в _два_ раза 

у меня вообще было так - первый запуск разница в два раза, второй запуск - одинаково. это было вчера на локальной машине, я тогда поленился рез-ты копировать.

Это сообщение отредактировал(а) Mayk - 1.12.2008, 09:52


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
J0ker
Дата 2.12.2008, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(MAKCim @ 1.12.2008,  09:42)
J0ker
clock() менее точен
по крайней мере в Linux он использует значение utime для процесса, а оно имеет латентность 1/HZ

через clock() аналогичная ситуация
на чем тестил? (ОС, компилятор)

какая разница наскока clock менее точен, если счет идет на тысячи
тестал на msvc9, winxp

Добавлено через 6 минут и 29 секунд
разница может быть из-за того, что на VC wchar_t не юникод-комплаянт - 2 байта вместо четырех - при правильном юникоде коллэйшен может быть сложнее


--------------------
user posted image
PM MAIL   Вверх
MAKCim
Дата 2.12.2008, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(J0ker @  2.12.2008,  08:13 Найти цитируемый пост)

какая разница наскока clock менее точен, если счет идет на тысячи

вооще говоря это просто утверждение насчет clock() и Linux
с чего ты взял, что это имеет отношение к теме?  smile 
там даже разделение идет специально пустой строкой


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1228 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.