我试图了解对未知边界数组的引用是否可以用作 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/