了解explicit之前,要先弄清楚什么是隐式转化。隐式转化既是当构造器只有一个参数时或有多个默认参数时,可以直接用 “ = ”直接赋值。如下:
#include "pch.h"
#include
#include
#include "malloc.h"
using namespace std;
class A
{
public:
A(int a = 5) { this->a = a; };
int getA() { return a; };
private:
int a;
};
int main()
{
A s;
s = 20; //可以直接对s的唯一参数进行修改。
cout << "s.a = " << s.getA() << endl;
return EXIT_SUCCESS;
}
但是当多个参数的构造器时,这样的隐式转化只会对第一个进行修改,这就出现了一些歧义。
#include "pch.h"
#include
#include
#include "malloc.h"
using namespace std;
class A
{
public:
A(char c = 'a',int a = 5): c(c),a(a) {};
int getA() { return a; };
char getC() { return c; };
private:
char c;
int a;
};
int main()
{
A s;
s = 'd';
s = 120;//就是ASCII码的 x
cout << "s.c = " << s.getC() << endl;
cout << "s.a = " << s.getA() << endl;
return EXIT_SUCCESS;
}
结果就只有c变为x。
所以用explicit修饰构造器,编译器就会避免这种隐式转化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。