C4267:"返回":从"size_t"转换为"const UINT",可能会丢失数据
C4267: 'return' : conversion from 'size_t' to 'const UINT', possible loss of data
如何使用类型转换来解决以下警告以const UINT?
C4267:"返回":从"size_t"转换为"const UINT",可能会丢失数据
Class CManager
{
std::vector<CString> m_ncount;
public:
const UINT GetMCount( int nInst) const;
}
const UINT CManager::GetMCount( int nInst) const
{
return m_ncount.size();//C4267
}
这是正确的吗?
const UINT CManager::GetMCount( int nInst) const
{
return (const UINT)m_ncount.size();//C4267
}
>UINT
(这不是标准的。 unsigned int
实际上是标准的)至少是 16 位,这意味着它是实现可靠的。不保证它可以用作index
或容器size
。但是,根据定义,size_t
大小与sizeof
运算符的输出完全相同。保证在所有情况下都可以在所有平台上工作。
因此,解决方案是使用 size_t
.任何其他解决方案都将忽略实际问题。感谢您的编译器警告!
如果需要在
向量中保存 INT_MAX
个以上的项目,请使用 size_t
。在大多数情况下,这并不重要,但我使用size_t
只是为了删除警告。
试试这个
std::size_t CManager::GetMCount( int nInst) const
{
return m_ncount.size();
}
如果您使用的是UINT
那么您可能在 Windows 下编码。在 32 位应用程序中,sizeof(UINT)
和 sizeof(size_t)
等于 4,但在 64 位构建下,这不是真的,sizeof(UINT)
是 4,sizeof(size_t)
是 8。
一种解决方案是使用 UINT_PTR
,无论您使用什么类型,都可以添加静态断言,例如:
static_assert(sizeof(UINT_PTR) == sizeof(size_t), "size_t must equal to ULONG_PTR");
如果未绑定到 Windows 平台及其特定类型的宏定义,请考虑返回 size_t
。
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- C4267:"返回":从"size_t"转换为"const UINT",可能会丢失数据
- 将包含 uint 和 floats 的 4 字节数据转换为 float