初始化从unsigned int64到unsigned int的转换

时间:2014-10-27 16:05:43

标签: c++ arrays casting dynamic-arrays data-loss

我已经环顾四周,这个错误对我来说有点奇怪。 我查看了<where do I convert?> warning C4244: 'initializing' : conversion from '__int64' to 'int', possible loss of data之类的线程,但是我的警告(对我这样的菜鸟)出现了其他原因。

我有一个名为“DArray.h”的头文件,它定义并实现动态数组的模板类。 内部数组如下所示:

struct InternalArray
    {
        T element;
        bool isAssigned;
        void Assign(const T& in)
        {
            element = in;
            isAssigned = true;
        }
        InternalArray()
        {
            isAssigned = false;
        }
    };
    InternalArray* internalArray;

其中T是整个DArray类的模板类型。

每当我需要调整内部数组的大小时,就会出现我的警告,方法是将其作为临时副本:

InternalArray* copyArray = new InternalArray[arraySize];

其中“arraySize”是无符号长long类型。 对我来说,它似乎只允许我使用unsigned int类型创建一个数组,并在我尝试制作这样的副本时自动降级'arraySize'。 我也尝试过:

InternalArray* copyArray = new InternalArray[dynamic_cast<unsigned long long>(arraySize)];

但是我被告知__int64是dynamic_cast的无效类型。 我也试过了

InternalArray* copyArray = new InternalArray[static_cast<unsigned long long>(arraySize)];

然而,这根本不会影响警告!我也尝试过C风格的演员。 我希望我不是那么愚蠢。据我所知,这些警告是非致命的,但也有点令人担忧。 有人可以向我解释当我打电话给这条线时到底发生了什么吗? 如果您有解决方案,我们非常欢迎您!

我应该明白这一点:我不希望'arraySize'被降级为unsigned int,int,short或其他任何内容。我希望它能够作为一个无条件的长期保持。 除非arraySize不是降级的项目。如果不是,那是什么? :/ 您是否无法使用int64类型创建数组?

1 个答案:

答案 0 :(得分:0)

您正在将无符号长long转换为无符号长long,这对帮助解决警告几乎没有帮助。

您需要执行此操作以将其强制转换为适当的大小整数

InternalArray* copyArray = new InternalArray[static_cast<size_t>(arraySize)];