int main()
{
typedef int Oranges;
typedef int Apples;
/* ... a lot of other code */
Oranges not_apples = 10;
Apples apples = not_apples; // ??? confusing
}
質問:私たちはtypedefで経由で宣言された変数に対する暗黙のキャストを禁止することはできますか?
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
構造体(クラス)内でtypedefされた型を隠蔽することができます。とにかく、ほぼすべての抽象的な値は、遅かれ早かれ、単純な「int」よりも詳細な表現を必要とします。
typedefの代わりにクラスを使用しますか? –
その単純な例では明らかですが、時にはさらに混乱します。 –
コンパイラのドキュメントをチェックすると、有効にすることができる警告が表示されることがあります。しかし、typedefは別の型の別名にすぎないので、一般的に許可されています。強力な型チェックが必要な場合は、Jamesが提案したクラスを使用します。 –