相关疑难解决方法(0)

如何处理"签名/未签名的不匹配"警告(C4018)?

我使用大量用C++编写的计算代码,考虑到高性能和低内存开销.它大多使用STL容器vector,并且几乎在每个函数中遍历那些容器.

迭代代码如下所示:

for (int i = 0; i < things.size(); ++i)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但它会产生签名/未签名的不匹配警告(Visual Studio中的C4018).

替换int某种unsigned类型是一个问题,因为我们经常使用OpenMP pragma,它需要计数器int.

我即将压制(数百个)警告,但我担心我错过了一些优雅的解决方案.

在迭代器上.我认为在适当的地方应用迭代器很棒.我正在使用的代码永远不会将随机访问容器更改为list某种东西(因此迭代int i已经是容器不可知),并且总是需要当前索引.您需要键入的所有其他代码(迭代器本身和索引)只会使问题复杂化并模糊底层代码的简单性.

c++ refactoring

71
推荐指数
5
解决办法
9万
查看次数

C++警告C4018:'<':有符号/无符号不匹配

当我在windows下编译时,此代码会抛出警告.有解决方案吗

#include<vector> 

int main(){
  std::vector<int> v;
  //...
  for (int i = 0; i < v.size(); ++i) { //warning on this line
    //...
  }
}
Run Code Online (Sandbox Code Playgroud)

c++ warnings

22
推荐指数
3
解决办法
5万
查看次数

标签 统计

c++ ×2

refactoring ×1

warnings ×1