Что означает (&) - амперсанд в круглых скобках - означает в этом коде? В этом ответе приведен следующий код (С++ 11): template <typename T, size_t N> constexpr size_t size_of(T (&)[N]) { return N; } Что означает (&) в этом контексте? Такие вещи чрезвычайно трудно найти. Ответ 1 Это сокращает примерно следующее: template <typename T, size_t N> constexpr size_t size_of(T (&anonymous_variable)[N]) { return N; } В функции вам фактически не нужно имя переменной, просто вычитание шаблона на N - поэтому мы можем просто отказаться от нее. Скобки являются синтаксически необходимыми, чтобы передать массив по ссылке - вы не можете передать массив по значению. Ответ 2 Передача массива в качестве параметра по ссылке: template <typename T, size_t N> constexpr size_t size_of(T (&)[N]) { return N; } Как вы не можете передать такой массив: template <typename T, size_t N> constexpr size_t size_of(T[N]) { return N; } Если массив получил имя, он будет выглядеть так: template <typename T, size_t N> constexpr size_t size_of(T (&arrayname)[N]) { return N; }
Ответ 1 Это сокращает примерно следующее: template <typename T, size_t N> constexpr size_t size_of(T (&anonymous_variable)[N]) { return N; } В функции вам фактически не нужно имя переменной, просто вычитание шаблона на N - поэтому мы можем просто отказаться от нее. Скобки являются синтаксически необходимыми, чтобы передать массив по ссылке - вы не можете передать массив по значению.
Ответ 2 Передача массива в качестве параметра по ссылке: template <typename T, size_t N> constexpr size_t size_of(T (&)[N]) { return N; } Как вы не можете передать такой массив: template <typename T, size_t N> constexpr size_t size_of(T[N]) { return N; } Если массив получил имя, он будет выглядеть так: template <typename T, size_t N> constexpr size_t size_of(T (&arrayname)[N]) { return N; }