考虑一个有效的代码:
template<size_t size>
void by_numbered_reference(int (&array)[size]);
该函数接受一个数组作为参数,编译器可以使用模板参数推导来推断它的大小。
现在定义这样的函数是有效的(在 Apple clang 3.0 版上测试):
void by_reference(int (&array)[], int size);
哪个(应该)接受对未知大小数组的引用作为参数。注意int[]
和int[n]
是不同的类型,通常是不兼容的。
我发现如何调用此函数的唯一方法是:
int * array;
by_reference(reinterpret_cast<int(&)[]>(*array), array_size);
- 为什么语言接受对未知大小数组的引用作为有效的函数参数,而没有直接的方法来定义这样的变量?
- 是否有任何需要此语法的已知用例?
- 为什么不
void by_reference(int (*&array), int size)
应该改用?