C++构造函数初始化列表:原理、语法与必须使用的场景
实例化对象时,构造函数常初始化成员变量。构造函数初始化列表提供直接、高效的成员初始化方式,在构造函数体执行前完成。除性能优势外,对const变量、引用成员、基类成员更是强制要求。
什么是构造函数初始化列表?
初始化列表直接初始化成员变量,避免默认构造后再赋值的开销。
语法
ClassName(type1 param1, type2 param2) : member1(param1), member2(param2) {
// 构造函数体
}
member1、member2在构造函数体运行前用param1、param2初始化。
初始化列表示例
#include <iostream>
#include <string>
class Student {
public:
Student(const std::string& name, int age) : name(name), age(age) {}
void display() const {
std::cout << "Name: " << name << ", Age: " << age << "\n";
}
private:
std::string name;
int age;
};
int main() {
Student s("Navya", 20);
s.display();
return 0;
}
输出
Name: Navya, Age: 20
为什么使用初始化列表?
- 避免默认初始化后再赋值,节省时间资源
- const变量、引用成员、基类成员必须在初始化列表初始化
- 将初始化逻辑集中在一处,与构造函数体分离
特殊场景
const或引用成员
const变量和引用成员不可重新赋值,必须在初始化列表初始化:
class Config {
public:
Config(const std::string& product, const int& model) : product(product), model(model) {}
private:
const std::string product;
const int& model;
};
基类初始化
派生类继承基类时,用初始化列表调用基类构造函数:
class Base {
public:
Base(int value) : baseValue(value) {}
protected:
int baseValue;
};
class Derived : public Base {
public:
Derived(int value, int extra) : Base(value), extraValue(extra) {}
private:
int extraValue;
};
C语言
- C 程序结构详解:Hello World 实例与编译运行全流程
- C 语言存储类详解:作用域、生命周期与四大类型实战
- C 语言错误处理最佳实践:errno、perror 与 strerror 详解
- 精通C#变量与基础数据类型:完整指南
- C++ 运算符重载实战指南:语法、方法、限制与代码示例
- C++ 结构体详解:定义、初始化、指针、函数参数与局限性
- C++ std::stack 完全指南:核心操作、实战示例与 STL 应用
- C# 反射完全指南:运行时类型发现、动态编程与特性读取
- C 语言开发环境搭建:编辑器与编译器完全指南
- 掌握 C# 预处理器指令:条件编译、诊断控制与代码组织实战
- C 语言类型转换完全指南:强制转换与隐式转换
- 2021 年 Windows/macOS/Linux 上 15 款最佳 C++ IDE(免费与付费)