Наверняка многие «плюсовыми» используют макрос, подобный нижеприведенному:
#define countof(array) (sizeof(array)/sizeof(array[0]))
Он хорош до тех пор, пока в качестве array в него не будет передан указатель на array. Компилятор проглотит и ничего не скажет, а результат будет совсем не тот, которого ожидает разработчик.
Благодаря constexpr появившемуся в C++11 есть возможность сделать безопасный countof.
template <class T, size_t N> constexpr size_t countof(const T (&)[N]) noexcept { return N; }
Теперь на этапе компиляции произойдет ошибка:
const int values[] = { 42, 76, 16, 11, 31 }; void foo(const int v[]) { for (size_t i = 0; i < countof(v); ++i) // <-- compilation error! { bar(v[i]); } }
Версия для C++98 может быть такой:
template <typename T, size_t N> char (&CountOfHelper(T(&)[N]))[N]; #define countof(x) sizeof(CountOfHelper(x))
Про “нагоняй за неуместное использовние тега С++ в теме про F-35”, спасибо поржал — это ты просто с перегрином не в теме, на чем написан софт F-35 и как это связано с задержками и фейлами в программе JSF, и почему хвостострел каждый раз нестерпевает, хотя это правда (и он сам признал, прежде чем удолил тему). Некое “целевое использование” тегов в толксах — вахтерство это и размахивание банхаммером — в чем хвостогуня не признается, даже уже вступив в дискуссию и испытав очередной багет от недостатка аргументов не основанных на эмоциях, но ты-то не опускайся до. Превед.
Ась? Вы мой блог с LORом не перепутали?