2012-03-01 15 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の代わりにクラスを使用しますか? –

+0

その単純な例では明らかですが、時にはさらに混乱します。 –

+4

コンパイラのドキュメントをチェックすると、有効にすることができる警告が表示されることがあります。しかし、typedefは別の型の別名にすぎないので、一般的に許可されています。強力な型チェックが必要な場合は、Jamesが提案したクラスを使用します。 –

答えて

3

typedefは実際には基本型のエイリアスのみを作成するため、作成した両方のタイプは実際にはintのエイリアスです。あなたが探しているものはboost::strong_typedefです。

+1

+1。言い換えれば、「暗黙のキャスティング」は行われていません。左手と右手の両方が同じタイプを持っています。 – ruakh

1

構造体(クラス)内でtypedefされた型を隠蔽することができます。とにかく、ほぼすべての抽象的な値は、遅かれ早かれ、単純な「int」よりも詳細な表現を必要とします。

関連する問題