2017-06-08 35 views
-1

我添加了下面的成員在我的課:平等檢查涉及constexpr例如

constexpr static folly::Unit nullUnit {}; 

這裏的蠢事鏈接::單位:上一個標誌

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

根據的,我會返回folly :: unit或nullUnit:

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

我執行相等檢查這樣的:

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

然而,似乎比較始終是真實的,即使我看到輸出如下:

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 

任何暗示表示讚賞

+0

您的''''==''''操作符總是返回true。你爲什麼期望它永遠是假的? – mascoj

+0

這個'Unit'類型或多或少是一個可以實例化的'void'。因此,一個實例表示缺少一個值*,並且它定義了所有的「單元」對象相互相等。看起來你的印象是'Unit'是一個「符號」類型,這不是鏈接文件中的註釋所表示的。 – cdhowie

+0

讀完Unit.h之後,我達到了相同的理解:-) – Ted

回答

2

愚蠢了這一點:

constexpr Unit unit {}; 

你有這個:

constexpr static folly::Unit nullUnit {}; 

它們是合理的,這些都是一樣的。此外,愚蠢有這樣的:

bool operator==(const Unit& /*other*/) const { return true; } 

很清楚,任何單位將比較任何其他。