如何避免“'='的警告信息:截断常数值”?

时间:2018-03-20 18:31:35

标签: c++

我在这里有点矢量,主要是为了学术价值。它适用于8,16,32,64等。在这种情况下,底层数组是32位指针。每个单元包含32位,可以单独设置和清除。

Bitvector<unsigned long int> b(32);  

我将所有位的每个32位单元填充为1。

bool setAll()
{
    for (int i = 0; i < m_size; i++)
    { 
        if (m_intSize == 32)
            m_array[i] = 0xFFFFFFFF;
        else if (m_intSize == 64)
            m_array[i] = 0xFFFFFFFFFFFFFFFF;
        else if (m_intSize == 16)
            m_array[i] = 0xFFFF;
        else if (m_intSize == 8)
            m_array[i] = 0xFF;
        else 
            return false; 
    }

    return true;
}

任何人都可以猜到,32位动态数组指针不能指向64位,所以我在m_array [i] = 0xFFFFFFFFFFFFFFFF上得到了这个截断错误;

warning C4309: '=': truncation of constant value

有没有办法摆脱这种警告?是否有某种选择可以做-1 * sizeof(T)或类似?

1 个答案:

答案 0 :(得分:2)

是的,假设无符号值,正常的方法是:

void setAll()
{
   for (int i = 0; i < m_size; i++)
       m_array[i] = -1;
}

C ++中的无符号整数定义为环绕,因此这将始终为您提供该平台上m_array[i]的最大可能值。

或者您可以#include <limits>并使用std::numeric_limits<T>::max(),但这并不是很酷。