语言基础:关键字explicit

Posted wnwin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了语言基础:关键字explicit相关的知识,希望对你有一定的参考价值。

C++中 explicit 被用来修饰只有一个参数的构造函数,作用是调用该构造函数必须是显示的, 跟它相对应的单词是 implicit(隐含的、不言明的),类构造函数默认情况下即声明为 implicit (因此C++没有此关键字)。

如果不使用该关键字,调用只有一个参数的构造函数允许通过缺省的转换操作完成,过程分为两步:

  • 将该构造函数参数对应数据类型的数据转换为该类对象;
  • 然后调用复制构造函数来实现构造对象;

通过一个例子来说明 explicit 作用:

class String{
??????explicit String(int n);
??????String(const char *p);
};
String s1 = 'a';       // 错误:不能做隐式char->String转换
String s2(10);??      // 可以:调用explicit String(int n);
String s3 = String(10);   // 可以:调用explicit String(int n);再调用默认的复制构造函数
String s4 = "Brian";       // 可以:隐式转换调用String(const char *p);再调用默认的复制构造函数
String s5("Fawlty");       // 可以:正常调用String(const char *p);

void f(String);

String g()
{
????f(10);         // 错误:不能做隐式int->String转换
????f("Arthur");   // 可以:隐式转换,等价于f(String("Arthur"));
????return 10;    // 错误:不能做隐式int->String转换
}

以上是关于语言基础:关键字explicit的主要内容,如果未能解决你的问题,请参考以下文章

语言基础:关键字explicit

C++中的explicit关键字的用法

c++中explicit和mutable关键字探究

c++ explicit关键字解读

(46)C#里使用自定义类型转换(Implicit和Explicit关键字)

(46)C#里使用自定义类型转换(Implicit和Explicit关键字)