当前位置: 首页 > article >正文

【QT】-explicit关键字

  1. explicit
    explicit 是一个 C++ 关键字,用于修饰构造函数。它的作用是防止构造函数进行隐式转换。

为什么需要 explicit?

在没有 explicit 的情况下,构造函数可以用于隐式类型转换。这意味着,如果你有一个接受某种类型的参数的构造函数,而传递给它的参数类型不完全匹配,它可能会自动进行类型转换。
但有时候这种隐式转换会导致不希望的行为或编译错误。为了避免这种情况,使用 explicit 修饰构造函数可以确保该构造函数只会通过显式的调用来使用。
举个例子:

class ClassB {
public:
    ClassB(int value);  // 非explicit构造函数
};

ClassB obj = 42; // 隐式转换 int 到 ClassB
这样代码是有效的,因为 ClassB(int) 构造函数可以接受一个 int 类型的值,编译器会自动将 42 转换为 ClassB 对象。

而如果构造函数声明为 explicit:

class ClassB {
public:
    explicit ClassB(int value);  // 显式构造函数
};
那么:

cpp

ClassB obj = 42;  // 编译错误
只有明确调用构造函数时,才会有效:


ClassB obj(42);  // 正常调用

总结:

explicit 修饰构造函数后,防止了隐式类型转换,确保构造函数只会在显式调用时执行。
2. *ClassB(QObject parent = nullptr)
这是 ClassB 的构造函数的声明部分。构造函数有一个参数 QObject *parent,其默认值为 nullptr。

*QObject parent:在 Qt 中,很多类都继承自 QObject,并且很多对象的生命周期是由父子关系来管理的。通常,Qt 对象(如 QWidget)可以有一个父对象,父对象负责管理子对象的销毁。当父对象被销毁时,所有子对象也会被销毁。

parent = nullptr:这是一个默认参数,表示如果在创建 ClassB 对象时没有显式传递父对象,那么 parent 默认就是 nullptr。这样做的好处是,如果不需要父对象的管理,构造时就可以不传递该参数。

例如:

cpp
ClassB classB; // parent 默认为 nullptr
或者,如果需要设置父对象:

cpp

ClassB classB(parentObject);  // parentObject 是另一个 QObject 类型的对象

为什么要有 parent 参数?

在 Qt 中,父对象(如一个窗口部件)会自动管理其子对象(如按钮、标签等)。如果 parent 被设置为某个对象,ClassB 的生命周期将与该父对象绑定。父对象销毁时,它的所有子对象也会自动销毁。
3. *QObject parent = nullptr 与 nullptr 的使用
nullptr 是 C++11 引入的关键字,用于表示空指针,代替了以前的 NULL 或 0。它是类型安全的,确保不会出现将 0 误用作指针的问题。
这里的 parent = nullptr 表示默认情况下,ClassB 不会绑定父对象。如果需要,可以传递一个具体的父对象。
总结
explicit 关键字防止隐式类型转换。
QObject *parent = nullptr 是构造函数的默认参数,表示对象默认没有父对象,如果需要父对象管理,可以显式传递。
在 Qt 中,父对象管理子对象的生命周期,确保子对象在父对象销毁时一同销毁。


http://www.kler.cn/a/517338.html

相关文章:

  • Python:元组构造式和字典推导式
  • STM32 GPIO配置 点亮LED灯
  • Spring Boot 邂逅Netty:构建高性能网络应用的奇妙之旅
  • 年度总结和寒假总结
  • 【算法】快速排序1
  • HUMANITY’S LAST EXAM (HLE) 综述:人工智能领域的“最终考试”
  • 如何将使用unsloth微调的模型部署到ollama?
  • 通过聚合和分离进行音频深度伪造检测的领域泛化
  • Android Studio:视图绑定的岁月变迁(2/100)
  • 在Linux系统上安装.NET
  • 【江西省乡镇界】面图层shp格式乡镇名称和编码wgs84无偏移arcgis数据内容测评
  • AI评估困境:标准化与实际应用的鸿沟
  • MySQL Redo Log 两阶段提交
  • 01 使用 海康SDK 对车辆监控设备进行布防
  • 安卓入门三十五 事件分发机制详解
  • Visual Studio 2022 GitHub Copilot聊天使用
  • 软件测试入门—软件缺陷 Bug 详解
  • 如何将IP地址修改为海外IP:详细操作指南
  • linux网络 | TCP报头之六个标记位与部分可靠性策略
  • 【无标题】mysql python 连接
  • qml Dialog详解
  • 达梦拷贝DM_HOME的复制安装
  • Python Numpy 数组的条件筛选
  • ubuntu 把安装好的 wine软件 打包 到另外一台机器
  • R语言学习笔记之高效数据操作
  • 第17篇:python进阶:详解数据分析与处理