【发布时间】:2021-06-15 20:16:37
【问题描述】:
提前说明:我知道按照我的要求去做不是一个好主意。这只是出于病态的语言好奇心,而不是实际使用中的问题。我在这里应用的规则是完全任意的。
假设我们有一个完全定义如下的函数。不得将其更改为除此之外的任何内容,不允许模板或函数重载。这个函数的实现也不能改变(并且可以被视为未知)。但是我们知道该参数被用作输出参数。
void my_func(int (&arr)[10]);
在另一个函数中,我们动态分配一个数组。这个分配也不能改变,我们不允许在栈上分配。也不允许进一步分配。
int* my_arr = new int[10];
是否有可能以某种方式调用my_func 并将其传递给my_arr?换句话说,是否有可能欺骗类型系统将my_arr 视为数组而不是指针?
朴素的铸件不会成功,它们都会导致编译错误:
my_func((int[10])my_arr);
my_func(static_cast<int[10]>(my_arr));
my_func(reinterpret_cast<int[10]>(my_arr));
另一个注意事项:我想欺骗类型系统。我不想从堆栈数组等复制数据。为什么?再次:病态的好奇心。
【问题讨论】:
标签: c++ arrays pass-by-reference