考虑一个有效的代码:
template<size_t size>
void by_numbered_reference(int (&array)[size]);
该函数接受一个数组作为参数,编译器可以使用模板参数推导来推导它的大小。
现在定义这样的函数是有效的(在 Apple clang 版本 3.0 上测试):
void by_reference(int (&array)[], int size);
它(应该)接受对未知大小数组的引用作为参数。注意到int[]
and int[n]
是不同的类型并且通常是不兼容的。
我发现如何调用此函数的唯一方法是:
int * array;
by_reference(reinterpret_cast<int(&)[]>(*array), array_size);
- 为什么该语言接受对未知大小数组的引用作为有效的函数参数,而没有直接的方法来定义此类变量?
- 是否有任何已知的用例需要此语法?
- Why
void by_reference(int (*&array), int size)
should not可以用来代替吗?
您的假设是错误的,该程序格式不正确。请参阅 C++11 标准 8.3.5/8:
如果参数的类型包括“指向 T 未知边界的数组的指针”或“引用”形式的类型
到 T 的未知边界的数组”,该程序格式错误。
clang 允许将其作为编译器扩展。例如,g++ 不会接受它。
但是,您可以使用模板来推断传递的数组的大小:
template <std::size_t N>
void by_reference(int (&)[N])
{
// whatever
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)