// c
typedef struct Student {
int age;
} S;
等价于
// c
struct Student {
int age;
};
typedef struct Student S;
此时?S?等价于?struct?Student,但两个标识符名称空间不相同。
另外还可以定义与?struct?Student?不冲突的?void?Student()?{}。
由于编译器定位符号的规则(搜索规则)改变,导致不同于C语言。
即表现为可以使用?Student?也可以使用?struct?Student,如下:
// cpp
struct Student {
int age;
};
void f( Student me ); // 正确,"struct" 关键字可省略
typedef struct Student {
int age;
} S;
void Student() {} // 正确,定义后 "Student" 只代表此函数
//void S() {} // 错误,符号 "S" 已经被定义为一个 "struct Student" 的别名
int main() {
Student();
struct Student me; // 或者 "S me";
return 0;
}