0

0

C++怎么使用结构体_C++struct详解教程【基础】

裘德小鎮的故事

裘德小鎮的故事

发布时间:2026-02-23 08:13:05

|

225人浏览过

|

来源于php中文网

原创

结构体与类仅默认访问权限和继承方式不同:struct默认public,class默认private;二者均可定义构造函数、虚函数等。常见错误是误以为struct无封装性而直接访问未初始化成员。

c++怎么使用结构体_c++struct详解教程【基础】

结构体不是类的简化版,它默认是公开的、不带默认行为的内存布局工具;用错访问控制或初始化方式,编译器不会提醒你,但运行时会出问题。

struct 和 class 到底差在哪?

差别只在默认访问权限和默认继承方式,其他完全一致。struct 默认 public,class 默认 private;两者都能有构造函数、成员函数、虚函数、模板特化——只要你不手动写 private:,struct 里所有成员天然可直接读写。

常见错误现象:struct Point { int x, y; }; Point p{}; cout 能编译通过,但若误写成 <code>class Point { int x, y; }; 就会报 ‘x’ is inaccessible

  • 别用 struct 暗示“只是数据”,它能做的事比你想的多
  • 如果结构体要被序列化(比如写进文件或网络传输),优先用 struct + std::is_standard_layout_v<t></t> 校验
  • C++20 起,constexpr 构造函数在 struct 中和 class 中行为一致,不用额外顾虑

初始化 struct 的三种写法及陷阱

老式 C 风格初始化({1, 2})只在聚合类型(aggregate)下安全;一旦加了构造函数、私有成员、基类,就失效。

立即学习C++免费学习笔记(深入)”;

使用场景:跨 C/C++ 边界传参、嵌入式寄存器映射、POD 类型配置块。

ResearchFlow
ResearchFlow

专为学术研究和深度信息探索设计的AI学术研究工具

下载

常见错误现象:struct S { int a; S() : a(0) {} }; S s = {1}; —— 编译失败,因为有了用户定义构造函数,不再是聚合类型。

  • 想保留 {...} 初始化?删掉任何构造函数,或改用 = default
  • 需要默认值又想聚合初始化?C++11 起支持 int a = 42; 这种内联初始化,不影响聚合性
  • S s{}; 是零初始化(a 变成 0),S s; 是未初始化(a 是垃圾值),这点容易被忽略

struct 成员函数要不要写?

要,只要逻辑属于这个数据集合本身。struct 不是“不能有函数”的代名词;不写反而导致外部函数依赖增多、接口分散。

性能影响几乎为零:成员函数本质就是带隐式 this 参数的普通函数,内联与否看编译器优化,跟 struct/class 无关。

常见错误现象:把 bool valid() const 写成全局 bool is_valid(const S&),结果多个文件重复实现,且无法随 struct 一起迁移。

  • 构造函数推荐显式写,哪怕只是 S() = default;,避免意外生成不满足需求的默认构造
  • 重载 operator== 很值得:C++20 支持 auto operator(const S&) const = default; 自动生成全部比较操作符
  • 避免在 struct 里写复杂析构逻辑;如果有资源管理需求,该用 class + RAII

最容易被忽略的是:struct 的内存对齐和字段顺序直接影响 sizeof 和 ABI 兼容性。改一个 intint64_t 可能让整个结构体大小翻倍,而你可能根本没意识到它正被用于 mmap 或 socket sendto。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

365

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

200

2025.07.04

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

830

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

580

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

274

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

210

2025.08.29

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

686

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

22

2025.12.06

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1030

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 10万人学习

C 教程
C 教程

共75课时 | 4.9万人学习

C++教程
C++教程

共115课时 | 18.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号