此问题在此处已有答案:
Deducing array size in template function, pass-by-value vs pass-by-reference difference [duplicate](1个答案)
2天前关闭。
在下面的代码中:
template <typename T, size_t n>
constexpr size_t array_size(T(&) [n]) { return n; }
引用(&)
用于成功替换模板。删除引用会导致以下错误:
'template<class T, long unsigned int n> constexpr size_t array_size(T*)'
5 | constexpr size_t array_size(T [n]) { return n; }
note: template argument deduction/substitution failed:
note: couldn't deduce template parameter 'n'
尝试使用在堆栈上声明的数组(如int test[10];
)调用函数array_size
时。
添加引用似乎是“强迫”编译器找到合适的替换。编译器从引用中获得了什么额外的信息,以便使用引用而不失败?
1条答案
按热度按时间yyhrrdl81#
C++的一个奇怪的特性是你不能把数组作为参数来传递,你只能传递数组的指针或引用,或者数据的指针,如果你试图把数组传递给函数,那么它实际上只是传递了一个指向数据的指针。
:(