Qt C++中的关键字explicit——防止隐式转换(也就是Java里的装箱),必须写清楚

摘要:
最近在复习QT,准备做项目了,QTCreator默认生成的代码explicitDialog中,有这么一个关键字explicit,用来修饰构造函数。关键字explicit可以禁止“单参数构造函数”被用于自动类型转换,主要用于"修饰"构造函数.指明构造函数只能显示使用,目的是为了防止不必要的隐式转化.光看这一句似乎不太容易明白,下面,举个简单地例子。那么,如果给构造函数加上关键字explicit,构造函数变成了explicitTest,再次编译,编译器就会报错。

最近在复习QT,准备做项目了,QT Creator 默认生成的代码 explicit Dialog(QWidget *parent = 0)中,有这么一个关键字explicit,用来修饰构造函数。以前在Windows下写程序的时候,基本上没有碰到这个关键字,那么这个关键字是做什么用的呢?

关键字 explicit 可以禁止“单参数构造函数”被用于自动类型转换,主要用于 "修饰 "构造函数. 指明构造函数只能显示使用,目的是为了防止不必要的隐式转化.

光看这一句似乎不太容易明白,下面,举个简单地例子。

//main.cpp
#include <iostream>

using namespace std;

class Test
{
public:
Test(int a)
{
m_data = a;
}

void show()
{
cout << "m_data = " << m_data << endl;
}

private:
int m_data;
};

void main(void)
{
Test t = 2; // 将一个常量赋给了一个对象
t.show();
}

编译能够通过,执行结果:m_data = 2。

为什么会这样呢?原来C++通过隐式转换,构造了一个临时对象Test(2),将它赋给了t(这里调用了默认的构造函数,而不是重载的“=”,因为这是在对象创建的时候)。那么,如果给构造函数加上关键字 explicit ,构造函数变成了 explicit Test(int a),再次编译,编译器就会报错。这时,就只能显式地使用构造函数了Test t = Test(2)。

http://blog.csdn.net/libaineu2004/article/details/19491579

免责声明:文章转载自《Qt C++中的关键字explicit——防止隐式转换(也就是Java里的装箱),必须写清楚》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇二维码(QR code)基本知识记录k8s安装es下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

CodeIgniter连接数据库及快速入门

一、数据库配置 CodeIgniter 有一个配置文件让你存放数据库连接值(username:用户名,password:密码,database name:数据库名,等等..). 该配置文件位于application/config/database.php. 你也可以通过放置不同的database.php文件到特定的环境配置文件夹里来设置特定环境的数据库连接...

python模块--os模块

打印文件的绝对路径:os.path.abspath(__file__) os.path.dirname("/root/python/test.py")   #只取目录名'/root/python' os.path.dirname(os.path.dirname("/root/python/test.py"))   '/root' import os B...

group by 两个或以上条件的分析

首先group by 的简单说明: group by 一般和聚合函数一起使用才有意义,比如 count sum avg等,使用group by的两个要素:(1) 出现在select后面的字段 要么是是聚合函数中的,要么就是group by 中的.(2) 要筛选结果 可以先使用where 再用group by 或者先用group by 再用having 下面...

test命令

test命令:判断文件类型,判断文件权限,判段表达式,判断字符串,判断整数大小/相等,判断两文件新旧,inode号是否一样 判断文件类型 命令 功能 -b 文件 判断是块设备文件 -c 文件 判断是字符设备文件 -d 文件 判断是目录文件 -f 文件 判断是普通文件 -L 文件 判断是符号链接文件 -p 文件 判断是管道文...

Python机器学习(5)——朴素贝叶斯分类器

朴素贝叶斯分类器是一个以贝叶斯定理为基础,广泛应用于情感分类领域的优美分类器。本文我们尝试使用该分类器来解决上一篇文章中影评态度分类。 1、贝叶斯定理 假设对于某个数据集,随机变量C表示样本为C类的概率,F1表示测试样本某特征出现的概率,套用基本贝叶斯公式,则如下所示: 上式表示对于某个样本,特征F1出现时,该样本被分为C类的条件概率。那么如何用上式来...

CentOS7压缩目录及解压

砸门先了解一下简单的压缩 / 解压指令 注:本文章只描述使用指令。如需阅读完整信息,请百度查询! gzip bzip2 xz -z :表示压缩 -d :表示解压 压缩指令:gzip file1 解压指令: gzip -d file1.gz [root@localhost test]# gzip 1 [root@localhost test]# ls1.g...