2013-06-05 60 views
1

當您收到類似警告時,是否有巧妙的方式在代碼中查找相關位置?看起來,唯一顯示的行號是指標準標題,但不是實際的代碼。我必須補充說,這個項目非常龐大,有數百個模塊和1MLOC +。C4800警告,如何查找源代碼中的位置

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 
      ] 
... 
+0

你最好仔細看看你的「tpuTask」類。它似乎允許轉換爲布爾。這幾乎總是無意的,這個警告顯示的原因。指針轉換是通常的問題,這是nullptr被添加到C++ 11的一個重要原因。 –

+0

是的,我認爲你是對的,系統(ab)使用一種方法將通用聯合指針轉換爲各種數據類型,我認爲這在某些C++特定情況下(如STL容器中的類型實例)效果不佳。 –

回答

0

您的代碼沒有問題。

但不幸的是,VC標準頭文件中的代碼在級別4中不是無警告的。您只能使用編譯器選項禁用該警告。