gpt4 book ai didi

c++ - 是否可以将动态分配的数组传递给需要数组引用的函数?

转载 作者:行者123 更新时间:2023-12-03 16:00:58 26 4
gpt4 key购买 nike

预先说明 : 我知道按照我的要求去做不是一个好主意。这只是出于病态的语言好奇心,而不是实际使用中的问题。我在这里应用的规则是完全任意的。
假设我们有一个完全定义如下的函数。不得将其更改为除此之外的任何内容,不允许模板或函数重载。这个函数的实现也不能改变(并且可以被视为未知)。但是,我们知道该参数用作输出参数。

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));
另一个注意事项:我想欺骗类型系统。我不想从堆栈数组等复制数据。为什么?再次:病态的好奇心。

最佳答案

您可以使用 reinterpret_cast为了这。使用数组类型的别名以使代码更易于阅读,您将拥有类似的内容:

void my_func(int (&arr)[10])
{
for (auto e : arr)
std::cout << e << " ";
}

int main()
{
using array_t = int[10];
int* my_arr = new int[10]{1,2,3,4,5,6,7,8,9,10};
my_func(reinterpret_cast<array_t&>(*my_arr));
}
你可以看到在这个 live example 工作.

关于c++ - 是否可以将动态分配的数组传递给需要数组引用的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66690939/

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