声明为 explicit 的构
造函数不能在隐式转换中使用。
/****************************************************
* brief : 测试explicit关键字
* author : shao
* date : 2020-02-27
* note : none
*
****************************************************/
/**
* explicit是防止构造函数的隐式转换。
* 注:是针对单参数的构造函数。(或者第一个参数没有默认值)
*/
#include <iostream>
using namespace std;
class MyString{
public:
explicit MyString(int a) //不能隐式转换
{
cout << "MyString(int a)" << endl;
}
MyString(const char *s)
{
cout << "MyString(const char *s)" << endl;
}
};
void test01(void)
{
/**
* MyString s1 = 10;这句话会让读者感觉有歧义,
* 到底是s1长度设置为10, 还是s1 = '10' 这个字符串。
* 所以为了避免这种困扰,我们直接不给使用这种隐式转换的方式。
*/
//MyString s1 = 10; //这里使用了explicit修饰,不能隐式转换
MyString(10); //要这么写才可以
MyString s2 = "test";
}
int main(void)
{
test01();
return 0;
}
结果如下: