我下面的文件boost/smart_ptr/detail/operator_bool.hpp
和遇到下面的代碼片段,我不明白爲什麼來自boost :: smart_ptr的&this_type :: px返回1?
typedef T * this_type::*unspecified_bool_type;
operator unspecified_bool_type() const // never throws
{
return px == 0? 0: &this_type::px;
}
我寫的與XCode的一些測試代碼和&this_type::px
總是返回1.爲什麼?
一些C++大師能分享你的想法嗎?
它可能聽起來像一個矛盾,但C++ 11解決方案可能被稱爲*'顯式'隱式*轉換函數。 +1 btw! – Nawaz
「對於C++ 11,這個技巧已經過時了」 - 並不完全(正如我所理解的那樣),而不是如果你想允許隱式轉換爲'bool'(假設賦值給一個'bool'對象),但拒絕你提到的算術。 – hvd
@hvd:好吧,對'bool'的隱式賦值從來不是這裏主要關心的,主要是它與'if(ptr)'慣用測試有關。但你說得對,它仍然可以用來允許這種隱式轉換。 –