プログラミング言語の概念に関する Ravi Sethi の本を読んでいます。
int *i1; int *i2;
これらの宣言の後、i1 と i2 の型は名前の型に互換性がありません。名前型の互換性を使用する言語では、変数 i1 と i2 を比較したり、互いに割り当てたりすることができませんでした。
名前に互換性がないのはなぜですか?それらは同じ名前の type:int を持っています。誰かがこれを説明し、有効な純粋な名前の等価性の例を挙げてもらえますか? ありがとう
プログラミング言語の概念に関する Ravi Sethi の本を読んでいます。
int *i1; int *i2;
これらの宣言の後、i1 と i2 の型は名前の型に互換性がありません。名前型の互換性を使用する言語では、変数 i1 と i2 を比較したり、互いに割り当てたりすることができませんでした。
名前に互換性がないのはなぜですか?それらは同じ名前の type:int を持っています。誰かがこれを説明し、有効な純粋な名前の等価性の例を挙げてもらえますか? ありがとう
どちらも type を持っていませんint
。どちらも へのポインタとして型付けされますint
。Sethi の要点は、名前の等価性 (のみ) を使用する架空の言語では、これらの 2 つの型へのポインターint
式は、互換性のない 2 つの異なる型を作成するということだと思いnew
ます。
名前等価言語では、型互換性を保って複数回使用するには、型式に名前を付ける必要があります。C++ 構文では、次を使用する必要がありますtypedef
。
typedef int *intp;
intp i1;
intp i2;
これで、i1
名前i2
に互換性のある型ができました。