Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么数组引用的语法需要(&;arr)而不是(arr&;)。另外,它如何帮助装订检查?_C++_Arrays_Templates - Fatal编程技术网

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]) {
现在我有两个问题

编译器如何计算大小,而C++编译器不能绑定检查
  • 如果我使用arr[size]而不是(&arr)[size],该怎么办。我的意思是有没有像(arr&)这样的东西。如果是,区别是什么
    在第一种情况下,通过引用传递数组。函数将只接受数组(而不是指针)。数组的大小总是已知的,编译器知道并在模板参数中解包


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

    可能重复2。函数参数
    int-arr[size]
    int*arr
    相同。这里有很多问题可以解释这一点。如果编译器知道数组的大小,为什么编译器不能在循环中遍历数组之类的情况下进行绑定检查。@PranitKothari它实际上可以做到这一点,您可以迭代
    int arr[3]{1,2,3};对于(自动和电气:arr)std::cout
    
    int peak(int * arr, size_t size)
    {