c++ 中的explicit
来源:互联网 发布:成都魔方软件 编辑:程序博客网 时间:2024/05/16 15:54
explicit 之所以被导入这个语言,就是为了提供程序员一种方法,使得他们能够制止“单一参数的constructor"被当成是一个conversion运算符。
qt里面定义QPushButton的例子:
class Q_GUI_EXPORT QPushButton : public QAbstractButton
{
Q_OBJECT
Q_PROPERTY(bool autoDefault READ autoDefault WRITE setAutoDefault)
Q_PROPERTY(bool default READ isDefault WRITE setDefault)
Q_PROPERTY(bool flat READ isFlat WRITE setFlat)
public:
explicit QPushButton(QWidget *parent=0);
explicit QPushButton(const QString &text, QWidget *parent=0);
QPushButton(const QIcon& icon, const QString &text, QWidget *parent=0);
~QPushButton();
explicit构造函数的作用
解析:
explicit构造函数是用来防止隐式转换的。请看下面的代码:
1 class Test1
2 {
3 public:
4 Test1(int n) { num = n; } //普通构造函数
5 private:
6 int num;
7 };
8
9 class Test2
10 {
11 public:
12 explicit Test2(int n) { num = n; } //explicit(显式)构造函数
13 private:
14 int num;
15 };
16
17 int main()
18 {
19 Test1 t1 = 12; //隐式调用其构造函数, 成功
20 Test2 t2 = 12; //编译错误,不能隐式调用其构造函数
21 Test2 t3(12); //显示调用成功
22 return 0;
23 }
Test1的构造函数带一个int型的参数,代码19行会隐式转换成调用Test1的这个构造函数。而Test2的构造函数被声明为explicit(显式),这表示不能通过隐式转换来调用这个构造函数,因此代码20行会出现编译错误。
普通构造函数能够被隐式调用。而explicit构造函数只能被显示调用。
- extern “C”总结 C++中的explicit关键字
- C/C++中的volatile和explicit
- C++, explicit
- c++-explicit
- c++中的explicit关键字
- c++中的explicit关键字
- c++中的explicit关键字
- c++中的explicit关键字
- c++中的explicit关键字
- C++中的 explicit 关键字
- c++中的explicit关键字
- C++ 中的 explicit
- C++中的explicit
- C++中的explicit关键字
- C++中的explicit关键字
- c++中的explicit关键字
- c++中的explicit关键字
- C++中的explicit关键字
- ADO.NET数据访问技术
- 颜色矩阵
- silverlight 中鼠标任意拖动控件的实例分享
- symbian GCCE &RVCT
- ASP中FormatDateTime函数详解
- c++ 中的explicit
- FLEX 程序设计基础
- Apache 使用localhost(127.0.01 )可以访问,但是使用本机IP(局域网)不能访问的解决办法
- Printf()函数简单实现
- 传入一个table,文件名,导出Excel的方法
- 算法分析
- 这半年比较忙,去UK3次,就为了交付项目并且协助测试。
- 调试程序,发现有内存泄漏
- A poll() example