MST

星途 面试题库

面试题:C++模板类中初始化成员列表的复杂场景应用

设计一个模板类 `Matrix` 表示矩阵,它有两个模板参数 `Row` 和 `Col` 分别表示行数和列数。类包含一个 `std::vector<std::vector<T>>` 类型的成员变量用于存储矩阵元素(`T` 为模板类型)。请实现一个构造函数,通过初始化成员列表完成对 `std::vector<std::vector<T>>` 的初始化,将矩阵所有元素初始化为 0。同时,说明在这种场景下使用初始化成员列表相比在构造函数体中赋值的优势。
25.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <vector>

template <size_t Row, size_t Col, typename T>
class Matrix {
private:
    std::vector<std::vector<T>> data;
public:
    Matrix() : data(Row, std::vector<T>(Col, T())) {}
};

使用初始化成员列表相比在构造函数体中赋值的优势

  1. 效率更高:在构造函数体中赋值,成员变量 data 会先默认构造,然后在构造函数体中被赋值,这涉及到一次默认构造和一次赋值操作。而使用初始化列表,data 直接使用指定的构造函数进行构造,只需要一次构造操作,减少了不必要的构造和赋值开销。
  2. 适用于 const 成员和引用成员:如果类中有 const 成员变量或引用成员变量,必须在初始化列表中进行初始化,因为这些类型在构造之后不能被赋值。例如:
class Example {
private:
    const int num;
    int& ref;
public:
    Example(int value, int& refValue) : num(value), ref(refValue) {}
};

在这个例子中,numconst 类型,ref 是引用类型,只能通过初始化列表进行初始化。