почему массив распадается на указатель в функции-шаблоне

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

Если вы посмотрите на следующий код: Когда параметр вынужден быть эталоном (функция 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;
}
7
задан David Feurle 17 October 2011 в 18:20
поделиться