1、隐式的意思是不用告诉它该怎么做,有点类似于自动化的意思
#include <iostream>
#include <string>
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)
:m_Name("Unknown"),m_Age(age){}
};
int main()
{
Entity name="Cherno";
Entity age = 22;
return 0;
}
什么?直接把22赋值给age这个Entity类了?
事实上这里发生了隐式转换,或者叫做隐式构造函数,它隐式地将22转换成为一个Entity,构造出一个Entity,因为有一个构造函数接收一个int类型的参数,有另一个构造函数接收字符串作为输入参数。
C++只会做一次隐式转换
2、explicit关键字是阻止C++使用隐式转换。explicit放在构造函数的前面,那么这个构造函数就不会隐式转换。如果要用一个整数构造这个Entity对象,就必须显式地调用这个被explicit修饰的构造函数