2014-01-09 57 views
5

此代碼:如何避免VS中的unique_ptr檢查性能警告?

unique_ptr<int> a; 
    if (a) { 
     cout << "ASSIGNED" << endl; 
    } 

,甚至這樣的代碼:

unique_ptr<int> a; 
    if (static_cast<bool>(a)) { 
     cout << "ASSIGNED" << endl; 
    } 

原因這樣的警告:

warning C4800: 'void (__cdecl *)(std::_Bool_struct<_Ty> &)' : forcing value to bool 'true' or 'false' (performance warning) 
with 
[ 
    _Ty=std::unique_ptr<int> 
] 

在Visual Studio 2012上警戒線3.我發現的第一個評論後只有在公共語言運行時支持/ clr打開時纔會發生。我應該如何避免它?

if (a.get() != nullptr) 

應該工作,但我認爲這不是如何設計unique_ptr,是嗎?

+2

我有VS2013,但它不給我這樣的警告! – billz

+1

在Visual Studio 2010中建立沒有警告的級別警告設置爲「/ W4」... – Johan

+0

我正在編譯/ W3(添加到帖子) –

回答

2

您可以直接使用

if (a != nullptr) 
+0

noloader的答案也是有效的我猜,但我更喜歡這個解決方案,而不是醜陋的雙感嘆號。 –

0

您通常可以清除Visual Studio中的性能警告與!!

unique_ptr<int> a; 
if (!!a) { 
    cout << "ASSIGNED" << endl; 
} 

我很久以前就邁克爾·霍華德的博客讀到它,但我沒有參考。他在談論乾淨的編譯和編譯器而不是關閉警告。