隐式转换
先定义一个类,两个构造函数
class Entity {
private:
std::string m_Name;
int m_Age;
public:
Entity(const std::string& name)
: m_Name(name) , m_Age(-1){};
Entity(int age) /*explicit显示调用,则不能使用隐式转换,它的唯一作用就是希望显示
调用构造函数*/
: m_Name("Unknown"), m_Age(age) {};
};
一般的初始化方法:
Entity a = Entity("che");
Entity b = Entity(22);
也可以通过隐式抓换的方法:
Entity c = "xiaoming";
Entity d = 2;
这里我的 Entity c = "xiaoming";
报错了(但是我看的教学视频里没用提示),说是没用从const char[] 数组转换到std::string的方法,这里应该给一个std::string类型的值,这个值会被用作于相应的构造函数,我们修改一下:
Entity c = std::string("xiaoming");
这样没用问题了。
我们再定义一个函数:
void PrintEntity(const Entity& entity) {
// nothing to do
}
调用这个函数:
PrintEntity(22);
// PrintEntity("xiaoming");/*报错是因为他不是一个std string,而是char*/
PrintEntity("xiaoming");
PrintEntity(Entity("xiaoming"));
会发现 PrintEntity("xiaoming");
这个是报错了的,原因同样是因为没用从const char[] 数组转换到std::string,因此修改为 PrintEntity(std::string("xiaoming"));
,不再报错,这个函数同样使用了隐式转换。
explict关键词
class Entity {
private:
std::string m_Name;
int m_Age;
public:
Entity(const std::string& name)
: m_Name(name) , m_Age(-1){};
explicit Entity(int age) /*explicit显示调用,则不能使用隐式转换,它的唯一作用就是希望显示
调用构造函数*/
: m_Name("Unknown"), m_Age(age) {};
};
给构造函数前面加上这个关键词,将无法再使用隐式转换,唯一作用就是希望显示调用构造函数