Форум программистов, компьютерный форум CyberForum.ru

string и cstring. Как это устроено? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.68
12kb
Сообщений: n/a
28.11.2012, 22:58     string и cstring. Как это устроено? #1
Здравствуйте.
Изучаю азы С++. В процессе возникло несколько вопросов. Вопросы простые, но мне мешают.
Во-первых. В стандартном наборе (Visual Studio 2012) имеются 2 библиотеки для работы со строками - это string и cstring. Какая между ними разница?
Не в плане самих функций - это детали, а в общем. Гдето (в дебрях этого форума) я видел ответ что cstring это мелкософтовская библиотека, в то же время на википедии видел её в списке стандартных библиотек С++. Могу предпожить что библиотека string была в С, а cstring добавилась в ++, при этом старая осталась для совместимости, как с iostream и stdio...
Вобщем то там несколько библиотек с перфиксами схххх. Вот я и хочу понять что это значит, и в каких случаях какой из них пользоваться.
Второй вопрос менее масштабный . Почему для реализации функции strlen() strcat() strstr() (может еще какихто) не нужно разрешать область видимости? Они ж стандартные? Значит поидее должны быть std::... а они и так и так работают Более того им даже не нужно #include<string>, хотя поидее они должны содержаться в ней. Опять же, я подозреваю, что они, наверное, пришли из C.
Так же буду благодарен за любые пояснения касательно устройства с++, и за ссылки на статьи по данной тематике.
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2012, 22:58     string и cstring. Как это устроено?
Посмотрите здесь:

В паскале это называется String C++
CString.Delete и std::string.erace C++
C++ Отличие CString от std::string
Как из CString получить int ... заранее спасибо!! C++
C++ Как перевести CString -ское число в Int?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
28.11.2012, 23:02     string и cstring. Как это устроено? #2
в Си была библиотека string.h
в ней хранились все функции вида strlen() strcat() strstr()
в С++ библиотеку string.h переименовали в cstring
Собственно, так же поступили и с другим наследием Си.
А библиотека string содержит тип std::string - это строка С++
StanislavUA
 Аватар для StanislavUA
44 / 44 / 3
Регистрация: 27.04.2011
Сообщений: 163
28.11.2012, 23:03     string и cstring. Как это устроено? #3
http://www.cplusplus.com/reference/cstring/
http://www.cplusplus.com/reference/clibrary/
Bredorub
4 / 4 / 0
Регистрация: 16.01.2011
Сообщений: 90
09.03.2013, 11:26     string и cstring. Как это устроено? #4
Тоже возник аналогичный вопрос, и вот что про cstring (как в общем-то и про все остальные заголовки формата с++) написано в хэлпе к xe2:
Including this header also ensures that the names declared with external linkage in the Standard C library header are declared in the std namespace. In this implementation, the names may or may not also be declared in the global namespace, depending on the specific translation environment.
Итак, если я правильно понимаю, то при использовании заголовка string.h имена с "внешним связыванием" объявляются вне пространства имён std, в отличии от cstring. Также в случае cstring имена могут быть объявлены в глобальном пространстве имён.
И что же всё это означает? Что нам это в итоге даёт?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 12:35     string и cstring. Как это устроено? #5
Подключение cstring или string.h разницы нет, потому что в cstring подключена string.h. В стиле С++ писать cstring. Подключение string даёт возможность работать с классом string (это уже С++).

Добавлено через 5 минут
Цитата Сообщение от 12kb Посмотреть сообщение
Они ж стандартные? Значит поидее должны быть std::... а они и так и так работают Более того им даже не нужно #include<string>, хотя поидее они должны содержаться в ней. Опять же, я подозреваю, что они, наверное, пришли из C.
Правильно подозреваете, поэтому для них и не нужен std::, потому что пространства имён - это С++.
Yandex
Объявления
09.03.2013, 12:35     string и cstring. Как это устроено?
Ответ Создать тему
Опции темы

Текущее время: 12:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru