c++11 默认函数
ChannelRack() = default;
✅ 它的正式名称是:默认函数(Defaulted Function)
更具体地,这是 C++11 标准中引入的一个特性,叫做:
🔹 显式默认构造函数(Explicitly Defaulted Constructor)
📘 语法说明
cpp
class ChannelRack { public: ChannelRack() = default; // 默认构造函数被显式地请求生成 };ChannelRack()是类的构造函数。= default;表示使用编译器自动生成的默认实现。
🧱 这属于 C++ 的哪一类语言特性?
它属于 特殊成员函数控制(Special Member Function Control) 的一部分,和 = delete 搭配使用。
| 特性 | 关键字 | 用途 |
|---|---|---|
| 显式要求编译器生成默认实现 | = default |
让编译器为构造函数、析构函数、拷贝/移动操作等生成默认代码 |
| 禁止使用某些函数 | = delete |
阻止调用特定函数(比如禁用拷贝构造) |
📚 示例对比:= default 和普通构造函数
1. 普通手动写的构造函数:
cpp
class MyClass { public: MyClass() { // 手动初始化代码 x = 0; } private: int x; };2. 使用 = default 的构造函数:
cpp
class MyClass { public: MyClass() = default; // 编译器自动帮你写一个“什么都不做”的构造函数 };🎯 适用场景总结
| 场景 | 是否需要 = default |
|---|---|
| 自定义了带参数的构造函数,但仍想保留无参构造函数 | ✅ 需要 |
| 想让编译器自动合成构造函数 | ✅ 可以用 |
| 类中没有特别资源管理需求(如内存、文件句柄等) | ✅ 推荐使用 |
| 不希望用户创建对象实例 | ❌ 应该使用 = delete |
🧠 小贴士:哪些函数可以 = default
以下 6 种特殊成员函数都可以使用 = default:
| 函数类型 | 示例 |
|---|---|
| 默认构造函数 | MyClass() = default; |
| 拷贝构造函数 | MyClass(const MyClass&) = default; |
| 移动构造函数 | MyClass(MyClass&&) = default; |
| 赋值运算符 | MyClass& operator=(const MyClass&) = default; |
| 移动赋值运算符 | MyClass& operator=(MyClass&&) = default; |
| 析构函数 | ~MyClass() = default; |
📝 总结一句话:
ChannelRack() = default;是 C++ 中的一种 显式默认构造函数语法,用于告诉编译器:“请帮我生成这个函数的标准版本”。
如果你是 C++ 新手,记住这几点就够了:
= default是让编译器自动生成默认行为。- 它不会执行任何额外代码。
- 当你自己写了别的构造函数时,加
= default可以保留默认构造函数。
如需进一步学习,我可以为你提供完整的小例子练习 😊
浙公网安备 33010602011771号