gpt4 book ai didi

c++ - 如何使用对未知大小数组的引用来调用函数?

转载 作者:可可西里 更新时间:2023-11-01 17:54:54 35 4
gpt4 key购买 nike

考虑一个有效的代码:

template<size_t size>
void by_numbered_reference(int (&array)[size]);

这个函数接受一个数组作为参数,编译器可以使用模板参数推导来推断它的大小。

现在定义这样的函数是有效的(在Apple clang version 3.0上测试过):

void by_reference(int (&array)[], int size);

哪个(应该)接受对未知大小数组的引用作为参数。注意 int[]int[n] 是不同的类型,通常不兼容。

我发现如何调用此函数的唯一方法是:

int * array;
by_reference(reinterpret_cast<int(&)[]>(*array), array_size);
  1. 为什么该语言接受对未知大小数组的引用作为有效的函数参数,而没有直接的方法来定义此类变量?
  2. 是否有需要此语法的任何已知用例?
  3. 为什么 void by_reference(int (*&array), int size) 应该代替?

最佳答案

你的假设是错误的,程序格式错误。参见 C++11 标准 8.3.5/8:

If the type of a parameter includes a type of the form “pointer to array of unknown bound of T” or “reference to array of unknown bound of T,” the program is ill-formed.

clang 允许将此作为​​编译器扩展。例如,g++ 将不会接受它。

然而,您可以使用模板来推断传递的数组的大小:

template <std::size_t N>
void by_reference(int (&)[N])
{
// whatever
}

关于c++ - 如何使用对未知大小数组的引用来调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18829274/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com