2014-01-09 3 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.

Verwandte Themen