Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 正在初始化从无符号int64到无符号int的转换_C++_Arrays_Casting_Dynamic Arrays_Data Loss - Fatal编程技术网

C++ 正在初始化从无符号int64到无符号int的转换

C++ 正在初始化从无符号int64到无符号int的转换,c++,arrays,casting,dynamic-arrays,data-loss,C++,Arrays,Casting,Dynamic Arrays,Data Loss,我环顾四周,这个错误对我来说似乎有点奇怪。 我环顾了一下周围的线程,但我的警告似乎是由其他原因引起的 我有一个名为DArray.h的头文件,它为动态数组定义并实现了一个模板类。 内部阵列如下所示: struct InternalArray { T element; bool isAssigned; void Assign(const T& in) { element = in;

我环顾四周,这个错误对我来说似乎有点奇怪。 我环顾了一下周围的线程,但我的警告似乎是由其他原因引起的

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

struct InternalArray
    {
        T element;
        bool isAssigned;
        void Assign(const T& in)
        {
            element = in;
            isAssigned = true;
        }
        InternalArray()
        {
            isAssigned = false;
        }
    };
    InternalArray* internalArray;
InternalArray* copyArray = new InternalArray[arraySize];
其中T是整个DArray类的模板类型

每当我需要调整该内部阵列的大小时,都会显示我的警告,方法是制作该阵列的临时副本,如下所示:

struct InternalArray
    {
        T element;
        bool isAssigned;
        void Assign(const T& in)
        {
            element = in;
            isAssigned = true;
        }
        InternalArray()
        {
            isAssigned = false;
        }
    };
    InternalArray* internalArray;
InternalArray* copyArray = new InternalArray[arraySize];
其中arraySize是无符号长类型。 在我看来,它似乎只允许我使用无符号int类型创建一个数组,并且在我尝试创建这样的副本时自动降级为“arraySize”。 我也尝试过:

InternalArray* copyArray = new InternalArray[dynamic_cast<unsigned long long>(arraySize)];
但是,我被告知u int64对于动态\u强制转换是无效的类型。 我也试过了

InternalArray* copyArray = new InternalArray[static_cast<unsigned long long>(arraySize)];
然而,这根本不会影响警告!我也试过C型演员。 唉,我希望我不是那么笨。据我所知,这些警告不是致命的,但也有点令人担忧。 有人能解释一下我打这个电话时到底发生了什么吗? 如果你有一个解决方案,这是完全欢迎

我应该说清楚:我不希望“arraySize”被降级为无符号int、int、short或其他任何形式。我希望它作为一个未签名的long。 除非arraySize不是要降级的项。如果没有,是什么/
是否无法使用int64类型创建数组?

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

您需要这样做才能将其转换为适当的整数大小

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

运算符new[]的参数必须为size\u t。如果size\u t等于unsigned int,您将得到此警告。static\u castarraySize很可能就是您要寻找的,但老实说,arraySize应该是std::size\t,就像整个动物园最好只使用std::vector一样。是的,使用size\t可以清除它。为什么呢?是否不允许程序分配超出此大小的数组?3.7.4p2-[basic.stc.dynamic]使用大小作为大小参数,列出了为operator new、operator new[]等提供的库原型。5.3.4[expr.new]中的运算符new限制性稍小,但没有更改标准库提供的内容。同样,类型size_t是一个实现定义的无符号整数类型,其大小足以包含任何对象的字节大小。因为最小的可寻址对象是一个八位组,所以允许更大的幅度是没有意义的。使用static_cast会更好吗?