Visual c++ C4800警告,如何在源代码中找到

Visual c++ C4800警告,如何在源代码中找到,visual-c++,stl,Visual C++,Stl,当您收到这样的警告时,是否有一种聪明的方法来查找代码中的相关位置?似乎显示的唯一行号是指标准标题,而不是实际代码。我必须补充一点,这个项目非常大,有数百个模块和1MLOC+ C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\utility(138): warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)

当您收到这样的警告时,是否有一种聪明的方法来查找代码中的相关位置?似乎显示的唯一行号是指标准标题,而不是实际代码。我必须补充一点,这个项目非常大,有数百个模块和1MLOC+

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\utility(138): warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
          C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xtree(1804) : see reference to function template instantiation 'std::pair<_Ty1,_Ty2>::pair<std::_Tree_iterator<_Mytree>,int>(_Other1 &&,_Other2 &&,void **)' being compiled
          with
          [
              _Ty1=std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<const std::string,tpuTask >>>>,
              _Ty2=bool,
              _Mytree=std::_Tree_val<std::_Tree_simple_types<std::pair<const std::string,tpuTask >>>,
              _Other1=std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<const std::string,tpuTask >>>>,
              _Other2=int
          ]
          C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xtree(1804) : see reference to function template instantiation 'std::pair<_Ty1,_Ty2>::pair<std::_Tree_iterator<_Mytree>,int>(_Other1 &&,_Other2 &&,void **)' being compiled
          with
          [
              _Ty1=std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<const std::string,tpuTask >>>>,
              _Ty2=bool,
              _Mytree=std::_Tree_val<std::_Tree_simple_types<std::pair<const std::string,tpuTask >>>,
              _Other1=std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<const std::string,tpuTask >>>>,
              _Other2=int
          ]
...
C:\ProgramFiles(x86)\Microsoft Visual Studio 11.0\VC\include\utility(138):警告C4800:“int”:强制将值设置为bool“true”或“false”(性能警告)
C:\ProgramFiles(x86)\Microsoft Visual Studio 11.0\VC\include\xtree(1804):请参阅正在编译的函数模板实例化“std::pair::pair(_Other1&,_Other2&&,void**)”的参考
具有
[
_Ty1=std::_Tree_迭代器,
_Ty2=布尔,
_Mytree=std::\u Tree\u val,
_Other1=std::_Tree_迭代器,
_Other2=int
]
C:\ProgramFiles(x86)\Microsoft Visual Studio 11.0\VC\include\xtree(1804):请参阅正在编译的函数模板实例化“std::pair::pair(_Other1&,_Other2&&,void**)”的参考
具有
[
_Ty1=std::_Tree_迭代器,
_Ty2=布尔,
_Mytree=std::\u Tree\u val,
_Other1=std::_Tree_迭代器,
_Other2=int
]
...

您的代码没有问题


但不幸的是,VC标准头中的代码在级别4中并不是没有警告的。您只能使用编译器选项禁用该警告。

您最好仔细查看“tpuTask”类。它似乎允许转换为布尔。这几乎总是出乎意料的,这就是显示此警告的原因。指针转换是常见的问题,Null pTR被添加到C++ 11中的一个很大的原因。我认为你是对的,系统(AB)使用一种方法来将通用的联合指针转换成各种数据类型,我认为这在某些C++特定的情况下不太好,比如STL容器中的类型实例。