为什么引用数组的语法需要(&arr)而不是(arr&)。另外,它如何帮助绑定检查?



在codereview中回答我的问题时。Stackexchange,建议使用

template <class T, size_t size>
T peak(const T (&arr)[size]) {

int peak(int * arr, size_t size)
{

现在我有两个问题,

  1. 编译器如何计算大小,而c++编译器不能绑定检查
  2. 如果我用arr[size]代替(&arr)[size]会怎么样?我的意思是,有没有像(尺寸)这样的东西。如果是,有什么区别?

在第一种情况下,通过引用传递数组。该函数将只接受数组(而不是指针)。数组的大小总是已知的,由编译器知道,并在模板形参中解包。

在第二种情况下,您可以传递任何指针或数组(后者将衰变为为指针),但您必须指定大小,因为编译器无法推断指针指向的内存大小。

最新更新