почему C ++ запрещает объявление параметра без типа? - PullRequest
2 голосов
/ 24 января 2012

Я хотел бы иметь следующий метод в качестве универсального метода для любого массива,

int arrayLength(`anyType` array[])
{
    return sizeof(array) / sizeof(array[0]);
}

Однако, похоже, C ++ вообще не допускает двусмысленности типов,

почему это так и как мне обойти это?

Ответы [ 3 ]

3 голосов
/ 24 января 2012

Поскольку типы должны быть помещены в стек, а затем возвращены обратно, и один тип sizeof не равен другому типу sizeof.

Если размер типов, передаваемых в стеке между функциями, не фиксирован или не известен заранее, как компилятор может скомпилировать функцию?

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

1 голос
/ 24 января 2012

Я думаю, что вы действительно спрашиваете: «Почему C ++ настаивает на статической типизации?»

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

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

1 голос
/ 24 января 2012

В Visual C ++ есть конструкция __countof(), которая делает то же самое. Он реализован как шаблон для компиляции C ++ и как макрос для C. Версия C ++ выдает ошибку, если используется на указателе (в отличие от истинного массива), а версия C - нет.

...