如何避免"'=': truncation of constant value"的警告消息?

How to avoid warning message of "'=': truncation of constant value"?

本文关键字:value 警告 消息 constant 何避免 truncation of      更新时间:2023-10-16

我这里有一点向量,主要是为了学术价值。它适用于 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) 或类似?

是的,假设有一个无符号值,执行此操作的正常方法是:

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(),但这并不那么酷。