2012-03-01 71 views
1

例子:Typdefs和隱式轉換

int main() 
{ 
    typedef int Oranges; 
    typedef int Apples; 

/* ... a lot of other code */ 

    Oranges not_apples = 10; 
    Apples apples = not_apples; // ??? confusing 
} 

問:我們能不能禁止隱式轉換爲這是通過的typedef聲明的變量?

+1

使用類而不是typedef? – 2012-03-01 03:24:13

+0

在這個簡單的例子中顯而易見,但有時它更令人困惑。 – 2012-03-01 03:27:09

+4

如果您檢查您的編譯器文檔,可能會提示您可以啓用。但通常它是允許的,因爲typedef只是另一種類型的別名。如果您想要按照James所建議的強類型檢查使用類。 – 2012-03-01 03:32:39

回答

3

typedef實際上只會爲基本類型創建一個別名,因此您創建的兩種類型實際上只是int的別名。你在找什麼是boost::strong_typedef

+1

+1。換句話說,沒有「隱式投射」正在進行:左側和右側都具有*完全相同的類型。 – ruakh 2012-03-01 03:35:48

1

您可能想隱藏結構(類)中的typedef類型。無論如何,幾乎所有的抽象值遲早都需要比簡單的「int」更詳細的represantion。