当前位置: 首页 > news >正文

C++基础系列【13】类的成员初始化

博主介绍:程序喵大人

  • 35- 资深C/C++/Rust/Android/iOS客户端开发
  • 10年大厂工作经验
  • 嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手
  • 《C++20高级编程》《C++23高级编程》等多本书籍著译者
  • 更多原创精品文章,首发gzh,见文末
  • 👇👇记得订阅专栏,以防走丢👇👇
    😃C++基础系列专栏
    😃C语言基础系列

review代码时,有同学问下面这段代码为什么不能通过编译:

class A {
public:
int a(100);
};int main() { A a; }

这里有涉及成员初始化的概念。

C++中的类成员初始化只有两种方式:

一种是通过构造函数初始化列表,也就是这样:

class A {
public:
A() : a(100) {}
int a;
};

另外一种是通过大括号形式进行默认成员初始化

class A {
public:
int a{100};
};

而最上面那个图中的括号初始化不属于以上两种中的任意一种,所以编译器就会报错。

那这里有个问题,以上两种方式都能初始化,那如果同时存在会出现什么行为

如果同时存在,那大括号形式的默认成员初始化会被忽略,而去使用构造函数初始化列表。

比如下面的代码:

class A {
public:
A() : a(200) {}
int a{100};
};int main() {A a;std::cout << a.a;
}

会输出200

具体可以看cppreference

http://www.lryc.cn/news/537506.html

相关文章:

  • Redis 03章——10大数据类型概述
  • Ubuntu 上安装 Elasticsearch 7.6.0
  • Android ListPreference使用
  • Java 大视界 -- 绿色大数据:Java 技术在节能减排中的应用与实践(90)
  • 计算四个锚点TOA定位中GDOP的详细步骤和MATLAB例程
  • 英码科技基于昇腾算力实现DeepSeek离线部署
  • CTex安装和使用(1)
  • Oracle序列(基础操作)
  • Unity Shader Graph 2D - Procedural程序化图形循环的箭头
  • 4、C#基于.net framework的应用开发实战编程 - 测试(四、二) - 编程手把手系列文章...
  • Windows搭建CUDA大模型Docker环境
  • 【前端进阶】「全面优化前端开发流程」:利用规范化与自动化工具实现高效构建、部署与团队协作
  • Linux入侵检查流程
  • Ubuntu24.04无脑安装docker(含图例)
  • 简述下什么是伪元素什么是伪类
  • 【C++】基础入门(详解)
  • Base64 PDF解析器
  • ZOJ 1011 NTA
  • 使用 GPT-SoVITS 克隆声音,很详细
  • Flask和Django相比哪个更适合新手?
  • 2. 图片性能优化
  • 多模态本地部署和ollama部署Llama-Vision实现视觉问答
  • cuML机器学习GPU库
  • 机器学习数学基础:24.随机事件与概率
  • CAS单点登录(第7版)27.开发人员
  • DeepSeek+即梦 做AI视频
  • OpenMetadata 获取 MySQL 数据库表血缘关系详解
  • 计算机组成原理—— 总线系统(十二)
  • 详解如何使用Pytest内置Fixture tmp_path 管理临时文件
  • Banana Pi OpenWRT One 官方路由器的第一印象