C++

Определение размера массива

Как обычно в С++ определяют размер массива, а очень просто, используют следующую конструкцию:


#define count_of( arg ) ( sizeof( arg ) / sizeof( arg[ 0 ] ) )


Однако она может стать причиной ошибки, если подсунуть туда указатель, не являющийся массивом, например, указатель на функцию. Проблему можно решить следующим образом (взято из исходных кодов проекта Chromium — основы браузера Google Chrome):


template <typename T, size_t N>
char (&ArraySizeHelper(T (&array)[N]))[N];
#define arraysize(array) (sizeof(ArraySizeHelper(array)))


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

Похожие записи




Комментарии (0)

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.

Warning: Unknown: write failed: No space left on device (28) in Unknown on line 0

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php5) in Unknown on line 0