MST

星途 面试题库

面试题:C++模板类中对象成员初始化的顺序问题

在C++模板类中,如果有多个对象成员需要初始化,请问这些对象成员的初始化顺序是怎样的?请结合代码示例说明。
19.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

在C++模板类中,对象成员的初始化顺序是按照它们在类中声明的顺序进行初始化,而不是按照在构造函数初始化列表中的顺序。

以下是代码示例:

#include <iostream>

template <typename T>
class MyClass {
public:
    MyClass(T value1, T value2) : member2(value1), member1(value2) {
        std::cout << "MyClass constructor called." << std::endl;
    }

    void printMembers() {
        std::cout << "member1: " << member1 << ", member2: " << member2 << std::endl;
    }

private:
    T member1;
    T member2;
};

int main() {
    MyClass<int> obj(10, 20);
    obj.printMembers();
    return 0;
}

在上述代码中,member1member2之前声明,尽管在构造函数初始化列表中member2先被初始化,但实际初始化顺序是member1先初始化,member2后初始化。运行程序,输出结果为:

MyClass constructor called.
member1: 20, member2: 10

这表明对象成员按照在类中声明的顺序进行初始化。