如何避免"'=': truncation of constant value"的警告消息?
How to avoid warning message of "'=': truncation of constant value"?
我这里有一点向量,主要是为了学术价值。它适用于 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()
,但这并不那么酷。
相关文章:
- 警告处理为错误这里有什么问题
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- cppcheck在const std::string[]上引发警告
- GCC对可能有效的代码抛出init list生存期警告
- 如何在BST的这个简单递归实现中消除警告
- 关于std::move的使用,是否有编译警告
- g++ 在某个类成员未初始化时不发出警告
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 警告:"Not all control paths return a value" c++
- 如何避免"'=': truncation of constant value"的警告消息?
- C++ "value++"会引起警告,但"value+1"不会?
- 如何在代码块 IDE 上修复此警告,警告:按值 [-Wcatch-value=] 捕获多态类型"类 std::d omain_error"
- 虚假"<function> is expected to return a value"警告?
- 警告:条件的第二个/第三个操作数不起作用 [-Wunused-value]
- 错误"value computed is not used"警告
- 如果。。否则警告" not all control paths return a value"
- 有没有一种正统的方法可以避免编译器警告 C4309 - 带有二进制文件输出的"truncation of constant value"?
- 为什么使用非运算符时警告"forcing value to bool 'true' or 'false'"消失?
- 如何使警告'The last statement should return a value'静音?