C语言函数模板中的非类型参数问题

2025-05-11 20:48:48
推荐回答(1个)
回答(1):

这些都是C++的玩意
T min( T (&arr)[size] ); //T (&arr)[size] arr是个数组的引用, 如果去掉括号,就变成引用的数组,而引用的数组是不存在的,改成T*就成了第二种定义了
用引用当参数,比如min(a),a就是实参本身,而不是副本,这是C语言所没有的特性. 既然是实参本身,那么数组a就不会退化为指针,也就是说,编译器可以可以获得a的大小,所以size就不需要提供了
而第一种和第二种,arr退化为指针了,所以必须通过其他途径提供数组长度,