Пользователь разместил answer, который говорит:Является ли строка [] не типом?
Итак, возьмите
Hash
по ссылкеvoid topWords(Hash const& t, std::string const& word, std::string* topA);
Кроме того,
string[]
не тип в C++- .. .
оригинальная функция отправленная на вопрос спрашивающим выглядит следующим образом:
void topWords(Hash t, string word, string topA[]);
Я знаю, что в Java, синтаксис для объявления массива является:
int[] anArray;
, тогда как в C++ это это:
int anArray[someNumber];
Я подозреваю, что это то, о чем говорил ответчик, но, возможно, t эй означал что-то еще. Так что я консультировался n3337:
форматирования примечание: не имеет значения материал опущена, добавлены новые строки для удобства чтения
§ 8.3.4 [dcl.array]
1 В декларации
T D
гдеD
имеет формаD1 [постоянное выражение неавтоматического] атрибут-спецификатор-сл неавтоматического
и тип идентификатора объявления
T D1
является «производного описатель-типа списокT
», то тип идентификатор отD
- тип массива;...
T
называется массив элемент типа;...
Если константа-выражение (5.19) присутствует, то он должен быть интеграл постоянным выражением и его значение должно быть больше нуля. Константное выражение указывает границу (количество элементов in) массив.Если значение константы выражения
N
, то массива имеетN
элементов пронумерованных0
кN-1
, и типу идентификатора D является «производного описателем типа списку массив изN T
»....
За исключением случаев, указанных ниже, если константа опущен, тип из идентификатора
D
является «производного описатель-типа список массив неизвестную граньT
» , неполный тип объекта. Тип «производного описателя-тип список массиваN T
» другой тип от типа «производного описателя-типа список массива неизвестного связанного изT
», см 3.9....
Так anArray
должен быть массивом someNumber int
. И topA
настроен на pointer to std::string
. Где мое понимание терпит неудачу?
Во избежание аннулирования текущих ответов, я отправлю это как обновление. Некоторые из вас, похоже, неправильно понимают характер моего вопроса. Я не спрашиваю о Java vs C++ и массивах против указателей, но, скорее, с точки зрения адвоката языка, почему string[]
не будет считаться типом.
Если мы посмотрим на §3.9/6:
... Заявленный тип объекта массива может быть массив неизвестного размера и, следовательно, быть неполными в одной точке в ЕП и завершить позже; типы массивов в этих двух точках («массив неизвестная граница
T
» и «массивN T
») - это разные типы. ... [ Пример:extern int arr[]; // the type of array is incomplete
Так arr
явно имеет тип.
'std :: string' - это класс, а не тип. –
@self Но ... §9/1: «Класс - это тип». –
Классы тоже типы. 'std :: string' - это класс, а не примитив. Классы и примитивы, однако, являются обоими типами. –