在C++中,我試圖在條件運算符中使用隱式轉換。考慮下面這個例子:C++中的隱式轉換
class MyFloat
{
public:
MyFloat(float val){m_val = val;}
operator float(){return m_val;}
protected:
float m_val;
};
int main(int argc, char **argv)
{
MyFloat a = 0.5f;
MyFloat b = 1.0f;
float x = true ? a-0.5f : b;
return 0;
}
它會導致一個編譯器錯誤:
error: operands to ?: have different types ‘MyFloat’ and ‘float’
我希望有條件的經營者隱式轉換b
到a-0.5
類型浮動。但是這並沒有發生。我如何實現這種隱式演員?
理想情況下,我想避免靜態轉換或像float MyFloat::getValue()
這樣的存取方法。
你從「隱式轉換」開始,然後用「隱式轉換」丟失了它。強制轉換是您在源代碼中編寫的內容,以告知編譯器進行轉換。沒有隱含演員這樣的事情。 –
我只是試圖在MS Visual Studio 2012 Professional中編譯和運行你的代碼。 0錯誤,0警告,工作良好。 – LihO
@LihO,它在GCC中失敗:http://ideone.com/9WPniF –