2014-01-09 5 views
5

Dieser Code:Wie verhindert man Performance-Warnung für unique_ptr in VS einchecken?

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

und auch dieser Code:

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

Ursache dieser Warnung:

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

in Visual Studio 2012 auf Warnstufe 3. Nach den ersten Kommentaren fand ich aus, dass es nur passiert, wenn die Common Language Runtime-Unterstützung/clr eingeschaltet ist. Wie soll ich es vermeiden?

if (a.get() != nullptr) 

sollte funktionieren, aber ich denke, das ist nicht wie unique_ptr entworfen wurde, war es?

+2

Ich habe VS2013, aber es gibt mir keine solche Warnung! – billz

+1

Erstellt ohne Warnung in Visual Studio 2010 mit Level-Warnung auf "/ W4" eingestellt ... – Johan

+0

Ich kompiliere auf/W3 (zum Beitrag hinzugefügt) –

Antwort

2

Sie können direkt verwenden

if (a != nullptr) 
+0

noloaders Antwort ist auch gültig, denke ich, aber ich bevorzuge diese Lösung anstelle des hässlichen doppelten Ausrufezeichens. –

0

Sie können in der Regel die Leistung Warnung auf Visual Studio klar mit !!:

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

ich es auf Michael Howard Blog vor langer Zeit gelesen, aber ich habe keine Referenz. Er sprach über saubere Kompilierungen und arbeitete mit dem Compiler, anstatt Warnungen zu deaktivieren.