我不明白爲什麼數組衰減到模板函數中的指針。爲什麼數組衰減到模板函數中的指針
如果你看看下面的代碼:當參數被強制爲引用(函數f1)時,它不會衰減。在另一個函數f衰變。爲什麼函數f中的T類型不是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;
}
如果你只是通過一個'in t'到'f',那麼'T'將是'int',而不是'int&'。因此,你應該問一些類似「爲什麼函數f中的T類型不是const char [3]'而是const char *'?」 (注意與你的答案相比缺少的'&') –
...(繼續我最後的評論)。關於C/C++語言的最愚蠢的事情是,如果你把'const char [3]'放在你的參數中,編譯器會默默地將它重寫爲'const char *'。例如,這對局部變量不會發生。我真的認爲這應該導致現在的警告(至少從C++編譯器) –