加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

[c++] explicit 关键字的作用

发布时间:2020-12-15 04:48:10 所属栏目:百科 来源:网络整理
导读:用explicit声明的构造函数可以很好地避免隐式类型转换问题 请看下面的例子: #include "stdafx.h" #include "iostream" using namespace std; class A { public: A(int x = 5); ~A(); void Print(); private: int num; }; A::A(int x) { num = x; } A::~A()

用explicit声明的构造函数可以很好地避免隐式类型转换问题

请看下面的例子:

#include "stdafx.h"

#include "iostream"

using namespace std;

class A

{

public:

A(int x = 5);

~A();

void Print();

private:

int num;

};

A::A(int x)

{

num = x;

}

A::~A()

{

}

void A::Print()

{

std::cout << num << std::endl;

}

int main()

{

A a;

a = 10;

a.Print();

return 0;

}

代码执行后,输出的结果为10,我们会发现,我们没有重载'='运算符,但是去可以把内置的int类型赋值给了对象A. a?= 10; 实际上,10被隐式转换成了下面的形式,所以才能这样。s = A temp(10);

当程序变成了以下样子后:

#include "stdafx.h"

#include "iostream"

using namespace std;

class A

{

public:

explicit A(int x = 5);

~A();

void Print();

private:

int num;

};

A::A(int x)

{

num = x;

}

A::~A()

{

}

void A::Print()

{

std::cout << num << std::endl;

}

int main()

{

A a;

a = 10; // 会报错,无法编译

a.Print();

return 0;

}

程序中会报错,通过两个例子我们知道:explicit可以抑制内置类型隐式转换,所以在类的构造函数中,最好尽可能多用explicit关键字,防止不必要的隐式转换。

参考链接:https://blog.csdn.net/qq_37233607/article/details/79051075

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读