标签: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转换
}
标签:ret implicit 操作 string转换 类构造 数据类型 必须 基础 class
原文地址:https://www.cnblogs.com/wnwin/p/10697405.html