C++的explicit的作用与隐式转化

了解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修饰构造器,编译器就会避免这种隐式转化。

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...