网址
分类
通识
状态
已完成
标签
电脑使用
自主学习
用途
类型
软件
上次编辑时间
May 28, 2025 08:34 AM
作者
上级 项目
子级 项目

C++ 结构体核心知识笔记

目录

  1. 基本定义与特性
  1. C与C++结构体对比
  1. 结构体与类的区别
  1. 高级用法
  1. 初始化方式
  1. 内存对齐与优化
  1. 注意事项

基本定义与特性

语法定义

核心特性
  • 可包含任意类型成员(基本类型、数组、其他结构体)
  • 支持成员函数(包括构造函数、虚函数)
  • 默认访问权限为public
  • 支持继承(可继承类或其他结构体)

C与C++结构体对比

特性
C结构体
C++结构体
成员函数
❌ 禁止
✅ 允许(支持虚函数)
访问控制
public
public/private/protected
静态成员
❌ 禁止
✅ 允许
继承能力
❌ 无继承
✅ 支持继承
构造函数
❌ 禁止
✅ 允许
直接初始化成员
❌ 禁止
✅ 允许(C++11起)
空结构体大小
sizeof=0
sizeof=1(确保地址唯一)

结构体与类的区别

特性
struct
class
默认访问权限
public
private
默认继承权限
public
private
使用场景
轻量级数据聚合
复杂对象封装
典型应用
坐标点、配置参数
业务逻辑实体、接口抽象
示例

高级用法

1. 嵌套结构体

2. 结构体数组

3. 函数参数与返回值

4. 模板结构体


初始化方式

方式
示例
说明
统一初始化
Student s{"王五", 21, 92.0}
C++11推荐方式
构造函数初始化
```cpp
需显式定义构造函数
struct Student {
Student(string n, int a) :
name(n), age(a) {}
};
成员逐个初始化
s.name = "赵六"; s.age = 22;
需先声明变量

内存对齐与优化

对齐规则
  1. 成员对齐:按#pragma pack值或成员类型大小的较小者
  1. 结构体整体对齐:按#pragma pack值和最大成员大小的较小者
优化建议

注意事项

  1. 与C兼容性
    1. 与C交互时避免使用C++特性(如成员函数)
  1. 位域应用
    1. 特殊场景下节省内存:
  1. 前向声明
    1. 支持结构体前向声明:
  1. 类型安全
    1. 结构体是独立类型,避免隐式类型转换

最佳实践
  1. 优先使用struct管理轻量级数据集合
  1. 超过5个成员时考虑拆分
  1. 配合const引用传递大型结构体
  1. 使用static_assert验证内存布局
Loading...