c++ - 在 C++ 中调用参数作为对未知边界数组的引用

标签 c++ function c++11 parameters c++17

我试图了解对未知边界数组的引用是否可以用作 C++ 函数中的调用参数。下面是我的例子:
例 1

void func(int (&a)[])
{
}
int main()
{
   cout << "Hello World" << endl; 
   int k[] = {1,2,3};
  // k[0] = 3;
   func(k);
   return 0;
}
令我惊讶的是,上面的示例 1 在使用 GCC 10.1.0 和 C++11 编译时有效,但不适用于低于 10.x 的 GCC 版本。我不认为我们可以在 C++ 中引用未知大小的数组。但是,此代码如何在以下链接中编译:successfully compiled
我的第二个问题是 我们可以为函数模板做这个吗 ?例如,
例 2
template<typename T1>
void foo(int (&x0)[])
{
}
示例 2 在任何版本(如 C++17 等)中是否有效 C++ 代码。我在一本书中看到示例 2 的用法,其中有 int (&x0)[]作为模板函数的函数参数。

最佳答案

I don't think that we can have references to arrays of unknown size in C++.


曾经是这种情况,尽管它被认为是语言缺陷。它从 C++17 开始就被允许了。
请注意,从已知边界数组到未知边界数组的隐式转换 - 这就是您在 main 中所做的示例 1 - 直到 C++20 才被允许。

Is example 2 valid C++ code in any version like C++17


是的;该模板对您是否可以引用未知边界数组没有影响。

关于c++ - 在 C++ 中调用参数作为对未知边界数组的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69070872/

相关文章:

function - 为什么Function [-A1,…,+ B]与允许任何父类(super class)型作为参数无关?

javascript从数组中删除项目

c++ - 显式默认构造函数

c++ - 返回值优化和构建结构的函数

c++ - 假设的、以前的 C++0x 概念问题

c++ - C++ 中的链接器正在接受具有相同参数和不同返回类型的函数,但我得到 SEGFAULT

c++ - 将 char* 隐式转换为我的字符串

c++ - 通过可变参数模板传递右值引用时出现编译器错误

c# - C++/C# 数组移位等效项

python - 获取二变量函数的所有可能结果 - Python 3