【发布时间】:2018-03-21 02:36:25
【问题描述】:
我这里有一个位向量,主要是为了学术价值。它对 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) 或类似的?
【问题讨论】:
标签: c++