![](/img/trans.png)
[英]How to pass reference to a string array as a function parameter in runtime when array size is unknown in C++?
[英]How to call a function with a reference to an unknown size array?
考虑一个有效的代码:
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)
? 你的假设是错误的,程序是不正确的。 请参阅C ++ 11标准8.3.5 / 8:
如果参数的类型包括“指向T的未知边界的数组的指针”或“对T的未知边界的数组的引用”形式的类型,则该程序是错误的。
clang允许这作为编译器扩展。 例如,g ++不会接受它。
但是,您可以使用模板来推断传递的数组的大小:
template <std::size_t N>
void by_reference(int (&)[N])
{
// whatever
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.