【发布时间】:2010-09-18 14:02:28
【问题描述】:
将向量的size() 函数的结果转换为unsigned int 似乎是安全的。不过,我怎么能确定呢?我的文档不清楚 size_type 是如何定义的。
【问题讨论】:
-
为什么要将结果转换为其他东西?您遇到类型不匹配的事实表明您的代码中有一些错误需要(或应该)修复(这就是 C++ 具有 STRONG 类型的原因)。不要尝试改变类型系统。
-
如果他需要将容器的大小传递给一些使用无符号整数的现有代码怎么办?
-
那么他就不走运了,因为在 64 位系统上,vector::size_type 可能相当合理地大于 unsigned int。
-
@JF:然后留下警告或修复您正在调用的代码。不要强制转换类型以删除警告,如果您的假设不成立,这只会在您迁移到新系统时破坏代码。
-
或者删除警告但添加一个断言(最好是编译时),当假设失败时触发。例如,在 GCC 上,有一个旧技巧是声明一个 char[sizeof(unsigned int) - sizeof(size_type)],当差异为负时,它就会爆炸。