2014-01-09 30 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; 
} 

我很久以前就迈克尔·霍华德的博客读到它,但我没有参考。他在谈论干净的编译和编译器而不是关闭警告。