C ++ - Является ли строка встроенным типом данных? - PullRequest
17 голосов
/ 22 марта 2011

В C++, является ли string встроенным типом данных?

Спасибо.

Ответы [ 10 ]

20 голосов
/ 22 марта 2011

Какое определение встроенного вы хотите использовать? Это встроенный набор инструментов компилятора, который у вас есть да , так и должно быть. Это лечится специально компилятором? нет , компилятор обрабатывает этот тип как любой определенный пользователем тип. Обратите внимание, что то же самое, вероятно, применимо ко многим другим языкам, за которые большинство людей ответит да .

Одной из основных задач комитета по С ++ является поддержание базового языка на минимальном уровне и обеспечение максимально возможной функциональности в библиотеках. Это имеет две цели: основной язык более стабилен, библиотеки могут быть переопределены, расширены ... без изменения ядра компилятора. Но что более важно, тот факт, что вам не нужна специальная поддержка компилятора для обработки большей части стандартной библиотеки, гарантирует, что базовый язык достаточно выразителен для большинства применений.

Упрощенно сказано в отрицательной форме: если бы для реализации языка требовалась специальная поддержка компилятора std::string, это означало бы, что у пользователей недостаточно сил, чтобы выразить это или подобное понятие в основном языке.

9 голосов
/ 22 марта 2011

Это не примитив, то есть он не «встроен» так, как int, char и т. Д.Ближайшим встроенным строковым типом является char * или char[], который является старым C-способом для работы со строчками, но даже для этого требуется куча библиотечного кода для продуктивного использования.

Скорее, std::string является частью стандартной библиотеки, которая поставляется практически со всеми существующими современными компиляторами C ++.Вам нужно будет #include <string> (или включить что-то еще, что включает его, но на самом деле вы должны включить то, на что ссылается ваш код), чтобы использовать его.

7 голосов
/ 22 марта 2011

Если вы говорите о std :: string, тогда нет.

Если вы говорите о массиве символов, я думаю, вы можете рассматривать его как массив встроенного типа.

3 голосов
/ 22 марта 2011

Нет.

Встроенные или "примитивные" типы могут использоваться для создания функциональности жизненного цикла со встроенным типом char.Это, наряду с служебными функциями, было тем, что использовалось в C. В C ++ все еще есть эта функциональность, но был добавлен более интуитивный способ использования строк.

Класс string является частью пространства имен stdи является экземпляром класса шаблона basic_string.Он определен как

typedef basic_string<char> string;

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

3 голосов
/ 22 марта 2011

Зависит от того, что вы подразумеваете под встроенным, но, вероятно, нет. std::string определяется стандартной библиотекой (и, следовательно, стандартом C ++) и очень универсально поддерживается различными компиляторами, но он не является частью основного языка, такого как int или char.

1 голос
/ 22 марта 2011

Это может быть встроенным, но это не обязательно.

Стандартная библиотека C ++ имеет документированный интерфейс для своих компонентов.Это может быть реализовано либо как библиотечный код, либо как встроенные компиляторы.Стандарт не говорит, как это должно быть реализовано.

Когда вы используете #include <string>, у вас есть доступная реализация std :: string.Это может быть связано либо с тем, что компилятор реализует это напрямую, либо с ссылками на некоторый код библиотеки.Мы не знаем наверняка, пока не проверим каждый компилятор.

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

0 голосов
/ 18 апреля 2016

Определенно нет. String - это класс из стандартной библиотеки. char * или char [] являются встроенными типами, но char, int, float, double, void, bool без каких-либо дополнений (в качестве указателей, массивов, модификаторов знака или размера). - unsigned, long и т. д.) являются основными типами.

0 голосов
/ 22 марта 2011

Нет, строка - это класс.

0 голосов
/ 22 марта 2011

Нет. Это часть стандартной библиотеки.

0 голосов
/ 22 марта 2011

Нет.Существуют различные варианты (например, Microsoft Visual C ++), но char * - это способ представления строк в C ++.

...