C++ 为什么数组引用的语法需要(&;arr)而不是(arr&;)。另外,它如何帮助装订检查?
,建议使用C++ 为什么数组引用的语法需要(&;arr)而不是(arr&;)。另外,它如何帮助装订检查?,c++,arrays,templates,C++,Arrays,Templates,,建议使用 template <class T, size_t size> T peak(const T (&arr)[size]) { 现在我有两个问题 编译器如何计算大小,而C++编译器不能绑定检查 如果我使用arr[size]而不是(&arr)[size],该怎么办。我的意思是有没有像(arr&)这样的东西。如果是,区别是什么 在第一种情况下,通过引用传递数组。函数将只接受数组(而不是指针)。数组的大小总是已知的,编译器知道并在模板参数中解包 在第二种情况下,您可以向
template <class T, size_t size>
T peak(const T (&arr)[size]) {
现在我有两个问题
在第一种情况下,通过引用传递数组。函数将只接受数组(而不是指针)。数组的大小总是已知的,编译器知道并在模板参数中解包
在第二种情况下,您可以向指针传递任何指针或数组(后者将衰减),但必须指定大小,因为编译器无法推断指针指向的内存大小。可能重复2。函数参数
int-arr[size]
与int*arr
相同。这里有很多问题可以解释这一点。如果编译器知道数组的大小,为什么编译器不能在循环中遍历数组之类的情况下进行绑定检查。@PranitKothari它实际上可以做到这一点,您可以迭代int arr[3]{1,2,3};对于(自动和电气:arr)std::cout
int peak(int * arr, size_t size)
{