/** Как определить длину массива в C++? */ /** Определять длину массива как sizeof(arr)/sizeof(*arr) не совсем безопасно, так как arr может быть обычным указателем. В Google Chrome используется для этого такой макрос: */ template <typename T, size_t N> char (&ArraySizeHelper(T (&array)[N]))[N]; #define ARRAY_SIZE(array) (sizeof(ArraySizeHelper(array))) /** Компилятор ругнётся, если попытаться подставить обычный указатель. Для простоты и лёгкости понимания определения функции ArraySizeHelper, возвращающей ссылку на массив char[N] можно переписать так: */ #include <boost/type_traits/add_reference.hpp> template <typename T, size_t N> typename boost::add_reference<char[N]>::type ArraySizeHelper( T (&)[N] ) ; #define ARRAY_SIZE(array) (sizeof(ArraySizeHelper(array))) /** Почитать подробнее: http://easy-coding.blogspot.com/2011/05/blog-post_24.html http://stackoverflow.com/questions/6376000/how-does-this-array-size-template-work */
среда, 21 августа 2013 г.
array size
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий