[英]Implicit conversion in 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的類型。 但這不會發生。 我如何實現這種隱式演員?
理想情況下,我想避免靜態float MyFloat::getValue()
或訪問器方法,如float MyFloat::getValue()
。
問題是有兩次轉換。 編譯器可以將a-0.5
轉換為MyFloat
,也可以將b
轉換為float
。 只要您同時進行了兩次轉換,並且兩者都沒有explicit
標記,您就會始終獲得這種模糊性。
只為您完成了一些轉換。 來自http://msdn.microsoft.com/en-us/library/e4213hs1(v=vs.71).aspx
第一個操作數必須是整數或指針類型。 以下規則適用於第二個和第三個表達式:
如果我沒記錯的話,三元運算符不會進行任何隱式轉換。 你需要寫
static_cast<MyFloat>(a-0.5)
要么
static_cast<float>(b).
當我回到家中獲取更多細節時,我將深入研究C ++標准文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.