3
我正在閱讀一些代碼,我遇到了一些我不明白的東西。 它關於測試Boost :: optional值是否被初始化。它使用提供了宏的ASSERT_TRUE()
的gtest框架。Boost可選隱式轉換爲bool?
#include "gtest\gtest.h"
void test() {
boost::optional<someClass> opt = someFunc();
ASSERT_TRUE(!!opt);
}
爲什麼需要opt
前!!
?是不是一個boost::optional
不會隱式轉換爲宏,這是宏需要?我認爲使用ASSERT_TRUE(opt)
來檢查opt是否具有正確的值就足夠了?
我明白了,但是如果我閱讀這篇文章的權利:http://stackoverflow.com/questions/4923384/conversion-of-boostoptional-to-bool,它是隱式轉換?這有改變嗎? – Ventu
@Suv if(my_optional)'即使轉換運算符爲「explicit」,也會編譯,因爲這是[上下文轉換](http://en.cppreference.com/w/cpp/language/implicit_cast#Contextual_conversions)。另外,根據Boost的版本以及你是否啓用了C++ 11等,'optional'可以使用安全bool idiom進行bool轉換,這也是一種隱式轉換,但是可以防止編譯一些有問題的用途。 – Praetorian