я не понимаю, почему массив распадается на указатель в функции шаблона.
Если вы посмотрите на следующий код: Когда параметр вынужден быть эталоном (функция f1), он не затухает. В другой функции f он затухает. Почему тип T в функции f не const char (buff &) [3], а скорее const char * (если я правильно понимаю)?
#include <iostream>
template <class T>
void f(T buff) {
std::cout << "f:buff size:" << sizeof(buff) << std::endl; //prints 4
}
template <class T>
void f1(T& buff) {
std::cout << "f:buff size:" << sizeof(buff) << std::endl; //prints 3
}
int main(int argc, char *argv[]) {
const char buff[3] = {0,0,0};
std::cout << "buff size:" << sizeof(buff) << std::endl; //prints 3
f(buff);
f1(buff);
return 0;
}