2012-04-18 3 views
2

Несколько сайтов утверждают, что тип строки является скаляром. Насколько я понимаю, скаляры являются однозначными типами, в отличие от типов массивов. Но не является ли строка по существу массивом символов? Так почему же это скаляр?Является ли строка типа скаляром, и если да, то почему?

EDIT: Если ответ/объяснение отличается от C до C++, я бы хотел, чтобы объяснения включали оба языка. Я добавляю тег C++ к этому вопросу.

+6

Ссылка на контекст, пожалуйста? Технически, C не имеет * тип строки. – Jon

ответ

5

char* и const char* являются скалярными типами, тогда как char[n] и const char[n] - нет.

Арифметические типы, типы перечислений, типы указателей, указатель на типы членов, std::nullptr_t и CV-квалифицированные версии этих типов вместе называются скалярные типы. (3.9 Типы [basic.types] §9)

0

Как правило, все базовые примитивные типы данных считаются скалярными.

Однако, поскольку C++ имеет STL, который является частью языка, вы можете рассматривать строку (NOT char array) как скалярный тип.

+0

Понятие «скалярные типы» очень специфично для C++, см. Мое редактирование. – fredoverflow

0

В C строка - это формат данных, а не тип. Строка C имеет тип array N+1 из char, где N - длина строки. Типы массивов не являются частью скалярных типов, а представляют собой совокупные типы.

C++ также имеет тип string, который относится к типу класса, но не является частью скалярных типов.

3

Различие между скалярными и агрегатными типами нечеткое. 32-битовое целое также представляет собой контейнер из 32 бит. Несмотря на то, что строка технически является совокупностью символов, мы часто манипулируем ими, поскольку мы будем манипулировать скалярами. Мы рассматриваем их как неизменные, сравниваем их, передаем им как аргументы и т. Д. В C более общий характер строк более очевидный, но многие другие языки, включая C++, делают их похожими на скаляры.

Другие примеры нечеткости - это комплексные числа и 3D-векторы. Они действительно состоят из нескольких doubles, но числовые программы по-прежнему выделяют их в стеке, передают их по значению, перегружают скалярные операторы на них и т. Д.

Смежные вопросы