MST

星途 面试题库

面试题:C++类成员初始化顺序的基础应用

假设有如下C++类定义: ```cpp class Base { public: int a; int b; Base(int x, int y) : b(y), a(b + x) { } }; ``` 请分析在创建`Base`类对象时,成员变量`a`和`b`的初始化顺序,并解释最终`a`和`b`的值是如何确定的。
49.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 成员变量初始化顺序
    • 在C++中,成员变量的初始化顺序是按照它们在类中声明的顺序进行的,而不是按照构造函数初始化列表中的顺序。在Base类中,先声明了int a;,再声明了int b;,所以先初始化a,再初始化b
  2. 最终ab值的确定
    • 初始化a时,b还未初始化(虽然在初始化列表中b写在a前面),b是一个未定义的值(这里是随机值),此时a被初始化为b + xx是构造函数传入的参数,b是未定义值,所以a是一个不确定的值。

    • 接着初始化bb被初始化为构造函数传入的参数y

    • 综上所述,a的值不确定(因为初始化时b未初始化),b的值为构造函数传入的y值。