例子:Typdefs和隱式轉換
int main()
{
typedef int Oranges;
typedef int Apples;
/* ... a lot of other code */
Oranges not_apples = 10;
Apples apples = not_apples; // ??? confusing
}
問:我們能不能禁止隱式轉換爲這是通過的typedef聲明的變量?
例子:Typdefs和隱式轉換
int main()
{
typedef int Oranges;
typedef int Apples;
/* ... a lot of other code */
Oranges not_apples = 10;
Apples apples = not_apples; // ??? confusing
}
問:我們能不能禁止隱式轉換爲這是通過的typedef聲明的變量?
typedef
實際上只會爲基本類型創建一個別名,因此您創建的兩種類型實際上只是int
的別名。你在找什麼是boost::strong_typedef
。
+1。換句話說,沒有「隱式投射」正在進行:左側和右側都具有*完全相同的類型。 – ruakh 2012-03-01 03:35:48
您可能想隱藏結構(類)中的typedef類型。無論如何,幾乎所有的抽象值遲早都需要比簡單的「int」更詳細的represantion。
使用類而不是typedef? – 2012-03-01 03:24:13
在這個簡單的例子中顯而易見,但有時它更令人困惑。 – 2012-03-01 03:27:09
如果您檢查您的編譯器文檔,可能會提示您可以啓用。但通常它是允許的,因爲typedef只是另一種類型的別名。如果您想要按照James所建議的強類型檢查使用類。 – 2012-03-01 03:32:39