私が持っているとします:
int a;
int b;
変数a
とb
名前は同等ですか (より具体的には、プリミティブ型には型名がないため、名前が同等と見なすことができますか)?
ありがとう。
私が持っているとします:
int a;
int b;
変数a
とb
名前は同等ですか (より具体的には、プリミティブ型には型名がないため、名前が同等と見なすことができますか)?
ありがとう。
a
名前 (より正確には名義) の等価性とは、値がその型の (完全修飾) 名によって決定されるのと同じ型を持つことを意味しますb
。構造的同等性とは、名前に関係なく、値の型が構造的に同等であるため、値が同じ型であると見なされることを意味します。名前付き型はそれ自体と構造的に同等であるため、名目上の型の同等性は構造型の同等性を意味します。あなたのa
とb
は、名前 ("int") で同じ型を持っているため、名目上は同じ型です。「プリミティブ型には型名がない」という主張は単に誤りint
です。型名です。int a; int b;
int a, b;
a
そしてb
同じ(構造的にも名前的にも)タイプです。
C の型システムは一般に名前によるものです。たとえば、int *
andshort*
は同じ表現であっても異なる型であり、 andint
は常に同じ表現であっても異なる型です。short
struct foo { int x; }
struct bar { int x; }
私が見つけたいくつかのクラスノートは、次のことを示しているようです:
int a;
int b;
変数a
とは、同等の名前でb
はありません。
ただし、次の場合:
int a, b;
変数a
とb
は同名です。