---
title: "结构体"
author: "Perrin Yong"
author_profile: https://www.pystone.net/profile/
published_by: "Perrin Yong"
canonical: https://www.pystone.net/notes/cpp-struct/
type: note
content_role: unspecified
visibility: public
id_stability: rename-stable
source_path: "10-计算机、信息技术与工程/02-编程语言与运行时/C++/结构体.md"
content_hash: b12c7353c526b4e9211cbd0cc977f04168d9cdc5222e6da42c760800b3acc729
knowledge_version: 224c990773de.5fa8af6e39fa
site_commit: 224c990773de166d23a886306577dd90379529ce
notes_commit: 5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a
---
# 结构体
## C++结构体与类的区别

结构体和类的唯一区别就是： 结构体和类具有不同的**默认访问控制属性**。

类中，对于未指定访问控制属性的成员，其访问控制属性为私有类型（private）

结构体中，对于未指定任何访问控制属性的成员，其访问控制属性为公有类型（public）


## C与C++结构体区别

C语言中结构体不允许定义函数成员，且没有访问控制属性的概念。


- C++为C语言中的结构体引入了成员函数、访问控制权限、继承、包含多态等面向对象特性。
- C++在struct之外引入了class关键字，但为了保持与C程序的兼容，C++保留了struct关键字，并规定结构体默认访问控制权限为公有类型。
- C语言中，空结构体的大小为0，而C++中空结构体（属于空类）的大小为1。

> C++中空类的大小为1的原因：
>
> 空类也可以实例化，类实例化出的每个对象都需要有不同的内存地址，为使每个对象在内存中的地址不同，所以在类中会加入一个隐含的字节。


## Ref

<https://www.cnblogs.com/Carrie-0173/p/6357715.html>
