gpt4 book ai didi

c++-cli - 创建 long/size_t 长度的托管数组

转载 作者:行者123 更新时间:2023-12-04 05:49:45 24 4
gpt4 key购买 nike

直接跳到代码,这就是我想做的:

size_t len = obj->someLengthFunctionThatReturnsTypeSizeT();
array<int>^ a = gcnew array<int>(len);

当我尝试这个时,我得到了错误

conversion from size_t to int, possible loss of data

有没有办法让我编译这段代码而无需显式转换为 int?我觉得奇怪的是我不能将数组初始化为这个大小,特别是因为有一个 LongLength 属性(如果你只能将长度初始化为 int,你怎么能得到一个 long 的长度 - 大于 int? ).

谢谢!

P.S.:我确实找到了this article这表示分配一个真正为 size_t 的数组可能是不切实际的,但我认为这不是一个问题。关键是我想初始化的长度存储在 size_t 变量中。

最佳答案

托管数组是为使用 Int32 实现的作为指数,没有办法解决这个问题。您不能分配大于 Int32.MaxValue 的数组.

您可以使用静态方法 Array::CreateInstance (采用 TypeInt64 数组的重载),然后转换结果 System::Array到适当的实际数组类型(例如 array<int>^ )。请注意,传递的值不得大于 Int32.MaxValue .而且您仍然需要转换。

所以你至少有两个选择。要么类型转换:

// Would truncate the value if it is too large
array<int>^ a = gcnew array<int>((int)len);

或者这个(不需要转换 len,而是 CreateInstance 的结果):

// Throws an ArgumentOutOfRangeException if len is too large
array<int>^ a = (array<int>^)Array::CreateInstance(int::typeid, len);

就我个人而言,我觉得第一个更好。您可能仍想检查 len 的实际大小,以免遇到上述任何错误。

关于c++-cli - 创建 long/size_t 长度的托管数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10224974/

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