我想添加一个函数,它将.size()值作为整数返回,而不是无符号整数.
编辑:由于评论,我解释更详细:
我有代码:
int something = 3;
if(arr.size() > something)
Run Code Online (Sandbox Code Playgroud)
这将产生编译器警告,我不喜欢添加(int)到我拥有它的每个地方.所以,我认为使用sizei()函数会很好的解决方案:
int something = 3;
if(arr.sizei() > something)
Run Code Online (Sandbox Code Playgroud)
哪个不会产生警告.
所以,我不想创建一个单独的函数,而是std :: vector本身的一个函数.
编辑:似乎这样做的唯一方法是创建另一个函数,例如:
template <typename T>
inline int sizei(const T &arr){
return (int)arr.size();
}
Run Code Online (Sandbox Code Playgroud)
从积极的方面来看:这似乎根本不会增加我的可执行文件大小.
首先,你为什么要这样?我没有看到任何理由或优势:
无论如何,你可以这样做:
template<typename T>
int size(const std::vector<T> &v) { return (int) v.size(); }
//use
std::vector<int> ints;
//...
int count = size(ints);
Run Code Online (Sandbox Code Playgroud)
我仍然没有看到这样做的任何意义.你可以简单地写:
int count = (int) ints.size();
Run Code Online (Sandbox Code Playgroud)
但我仍然会说它不比以下更好:
size_t count = ints.size(); //don't prefer anything over this. Always use size_t
Run Code Online (Sandbox Code Playgroud)
int尺寸.喜欢size_t.至于你的问题编辑.你为什么不用size_t作:
size_t something = 3;
if(arr.size() > something)
Run Code Online (Sandbox Code Playgroud)
没有警告.在我看来,如果你选择的数据在整个程序中始终打字,你不会看到他的情况来当你比较int与size_t被定义为无符号整型.
或者,如果有一些遗留代码可以使用,哪些int用于大小,那么我认为最好在需要时使用显式强制转换,而不是在框架本身中添加一个函数,这隐藏了潜在的问题:
int something = /*some legacy code API call or something */;
if(arr.size() > (size_t) something)
//or even better;
size_t something = (size_t) /*some legacy code API call or something */;
if(arr.size() > something)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1735 次 |
| 最近记录: |