Что означает (&) - амперсанд в круглых скобках - означает в этом коде?
В этом ответе приведен следующий код (С++ 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;
}