【发布时间】:2011-06-15 17:10:47
【问题描述】:
我想添加一个将 .size() 值作为整数而不是无符号整数返回的函数。
编辑:由于cmets,我解释的更详细:
我有代码:
int something = 3;
if(arr.size() > something)
这会产生编译器警告,我不喜欢将 (int) 添加到我拥有它的每个地方。 所以,我认为有一个 sizei() 函数会很好的解决方案:
int something = 3;
if(arr.sizei() > something)
不会产生警告。
所以,我不想创建一个单独的函数,而是在 std::vector 本身中创建一个函数。
编辑:似乎唯一的方法是创建另一个函数,例如:
template <typename T>
inline int sizei(const T &arr){
return (int)arr.size();
}
积极的一面:这似乎根本不会增加我的可执行文件大小。
【问题讨论】:
-
为什么?计数为 -1 的用例是什么?
-
我不确定这个问题是否有意义。您对返回的类型有什么具体问题吗?
-
这个问题被不合理地否决了。一些编译器会在混合有符号无符号比较时发出警告,而我发现的无符号数的唯一好用例是定义明确的模运算。使用无符号来限制域(几乎)总是错误的做法,IMO。
-
当然你不应该比较混合符号,但是如果出现这种情况你应该在你需要的地方转换
size()的结果,即转换。这样您就可以定位问题并且不需要更改向量的语义以及“大小”的固有无符号性质。 -
哦,如果你想激怒那些告诉你的人,请提醒他们不要使用
size_t,而应该使用std::vector<whatever>::size_type;-)