电子产品商务网站模板,简单手工,企业建网站流程,学生网页设计模板素材博主介绍#xff1a;程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章#xff0c;首发gzh#xff0c;见文末#x1f447;#x1f… 博主介绍程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章首发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