【发布时间】:2018-06-28 08:46:51
【问题描述】:
在我使用std::vector 编写的大多数程序中,我的大部分痛苦都在转换
int offset=(int)v.size();
unsigned int offset=(unsigned int)v.size();
很遗憾这样的问题反映在this等很多其他问题上。
有什么方法可以重新连接std::vector 并强制它提供int 或unsigned int 之类的大小?
int offset=v.size_i();
类型转换使代码变得更加混乱。虽然,有些程序员很喜欢它们,并且觉得每次投射都没有问题。
c++14 解决方案更受欢迎,但c++17 解决方案也受到欢迎。
如果有人建议更改变量的类型,那么迟早会发生另一种类型转换。所以它并没有解决问题。
请考虑这些丑陋的短语
function((int)myvar1.vec[32].size(),(int)myvar2.vec[32].size());
其中function 只接受ints。而且我无法控制它的定义。
【问题讨论】:
-
对
auto使用编译器类型推断?喜欢auto offset = v.size()? -
@Someprogrammerdude,如果我需要
offset成为int,因为它被传递给另一个函数,最后应该发生另一个转换。 -
你总是可以创建一个
ssize()来为你做这件事。 -
为什么不使用隐式转换?当弹出“比较签名和未签名”警告时,只需转换为
signed/unsigned -
myvar1.vec[32].size()看起来已经很乱了,能不能把它封装成一个函数本身,给你想要的东西?