4

私はいくつかのコードを読んでいて、理解できないものに出くわしました。Boost::optional 値が初期化されているかどうかをテストします。マクロを提供する gtest フレームワークを使用しますASSERT_TRUE()

#include "gtest\gtest.h"

void test() {
    boost::optional<someClass> opt = someFunc();
    ASSERT_TRUE(!!opt);
}

なぜ!!beforeが必要なのoptですか? boost::optionalマクロに必要な bool に暗黙的に変換されていませんか? ASSERT_TRUE(opt)opt が正しい値を保持しているかどうかを確認するために使用するだけで十分だと思いましたか?

4

1 に答える 1

9

bool に変換されたboost::optionalnot impicitです

いいえ、ちがいます。その変換演算子 toboolはマークされexplicitていますが、テスト フレームワークには暗黙的に変換可能なものが必要です。プレーンでbool test = opt;も問題が発生するはずです。コンパイルに失敗するはずです。

于 2016-01-20T23:25:35.433 に答える