2017-06-08 2 views
-1

die ich addierte folgendes Mitglied in meiner Klasse:Gleichheitsprüfung constexpr Instanz

constexpr static folly::Unit nullUnit {}; 

Hier der Link zur Torheit ist :: Unit:

https://github.com/facebook/folly/blob/master/folly/Unit.h

auf einer Flagge Je würde ich zurückgeben entweder folly :: unit oder die nullUnit:

    if (mutate_resp->processed()) { 
         LOG(INFO) << "check returns folly::unit"; 
         return folly::unit; 
        } 
        LOG(INFO) << "check returns nullUnit"; 
        return nullUnit; 

Ich mache Gleichheit Besuche wie folgt aus:

if (ret == folly::unit) return true; 
return false; 

Es scheint jedoch, der Vergleich immer wahr ist, auch wenn ich die folgenden in Ausgabe sah:

I0608 22:43:37.729920 18225 raw-async-table.cc:132] check returns folly::unit 
I0608 22:43:37.731446 18225 raw-async-table.cc:135] check returns nullUnit 

Jeder Hinweis

+0

Ihr Operator '' '' == '' '' gibt immer true zurück. Warum sollten Sie erwarten, dass es jemals falsch ist? – mascoj

+0

Dieser 'Unit' Typ ist mehr oder weniger ein' void', der instanziiert werden kann. Eine Instanz repräsentiert daher das * Fehlen eines Wertes, * und es ist definiert, dass alle 'Einheit'-Objekte einander gleich sind. Es scheint, dass Sie den Eindruck haben, dass "Unit" ein "Symbol" -Typ ist, was die Kommentare in der verknüpften Datei überhaupt nicht anzeigen. – cdhowie

+0

Nachdem ich Unit.h gelesen hatte, kam ich zu demselben Verständnis :-) – Ted

Antwort

2

Folly geschätzt wird, hat dies:

constexpr Unit unit {}; 

Und Sie haben dies:

constexpr static folly::Unit nullUnit {}; 

Es ist sinnvoll, dass diese identisch sind. Darüber hinaus hat Folly dies:

So klar, jede Einheit wird gleich zu vergleichen mit anderen.