C 11 では、'using' は型エイリアスを作成するための構文として登場し、由緒ある ' typedef」。両方の構文は互換性があるように見えますが、表面下には微妙な違いが潜んでいます。
スコープとテンプレート コンテキスト
の「使用」は、型のエイリアシングを超えた目的を果たします。提供されたコード スニペットに示されているように、「テンプレート typedef」の宣言が可能になります。一方、'typedef' にはこの機能がなく、テンプレート以外の使用に限定されています。
意味上の同等性
C 標準から、'using'型エイリアスの宣言は、「typedef」と「同じセマンティクス」を持ちます。これは、エイリアスを「使用する」ことは新しい型を確立するのではなく、既存の型に代替名を提供するだけであることを意味します。暗黙的な変換では、元の型とそのエイリアスの有効性が保持されます。
実装の詳細
'typedef' と 'using' は意味的に同等ですが、それらの実装は特定の点で異なる場合があります。コンパイラ。 「typedef」は、「弱い」方法で型のエイリアスを行うことが知られており、エイリアスと基になる型の間で透過的な変換が可能です。コンパイラによっては、エイリアスの「使用」に同様の処理を適用する場合もありますが、別のコンパイラではエイリアスを別個の型として処理できる可能性もあります。
実際的な意味
ほとんどの使用例では、' typedef と 'using' は交換可能であると考えることができます。ただし、コンパイラ間で「使用」の実装が潜在的に異なるため、問題が発生する可能性があります。したがって、プログラマは、クロスプラットフォームまたはパフォーマンス重視のコンテキストで 'using' を使用するときは注意する必要があります。
以上がC の `typedef` と `using` : 主な違いは何ですか?いつどちらを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。