码迷,mamicode.com
首页 > 编程语言 > 详细

语言基础(6):关键字explicit

时间:2019-04-12 17:43:56      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:ret   implicit   操作   string转换   类构造   数据类型   必须   基础   class   

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转换
}

语言基础(6):关键字explicit

标签:ret   implicit   操作   string转换   类构造   数据类型   必须   基础   class   

原文地址:https://www.cnblogs.com/wnwin/p/10697405.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!