您的位置:首页 > 编程语言 > C语言/C++

Difference between 'struct' and 'typedef struct' in C++?

2016-06-20 15:19 507 查看
原址

摘抄:

In C++, there is only a subtle difference. It's a holdover from C, in which it makes a difference.

1. In C, there are two different namespaces of types: a namespace of 
struct
/
union
/
enum
 tag names
and a namespace of 
typedef
 names
.
If you just said:
struct Foo { ... };
Foo x;


You would get a compiler error, because 
Foo
 is
only defined in the tag namespace. You'd have to declare it as:
struct Foo x;


2. Any time you want to refer to a 
Foo
,
you'd always have to call it a 
struct
Foo
. This gets annoying fast, so you can add a 
typedef
:
struct Foo { ... };
typedef struct Foo Foo;


Now both 
struct
Foo
 (in the tag namespace) and just plain 
Foo
 (in
the typedef namespace) both refer to the same thing, 

3. and you can freely declare objects of type 
Foo
 without
the struct keyword. The construct
typedef struct Foo { ... } Foo;


is just an abbreviation for the declaration and 
typedef


4. Finally,
typedef struct { ... } Foo;


declares an anonymous structure and creates a 
typedef
 for
it. Thus, with this construct, it doesn't have a name in the tag namespace, only a name in the typedef namespace. This means it also can't be forward-declared. If you want to make a forward declaration, you have to give it a name in the tag namespace.(注:匿名的结构体定义也无法自定义各种构造函数)

5. In C++, all 
struct
/
union
/
enum
/class
declarations act like they are implicitly 
typedef
'ed,
as long as the name is not hidden by another declaration with the same name. See Michael
Burr's answer for the full details.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++