c++中的隐式对话和隐式关键词
这是一个简单的类的声明和调用
#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("Unknow"),m_Age(age){} }; int main() { Entity a("Wangtn");//Entity a=Entity("Wangtn"); Entity b(26);//Entity b=Entity(26); std::cin.get(); }
如果我们使用隐式方式的话,也可以这样来初始化它
int main() { Entity c = (const std::string&)"Wangtn"; Entity d = 26; std::cin.get(); }
如果有这样一个函数,你可以在主函数中如下调用它
void Print(const Entity& entity) { //print something } int main() { Print(22); Print((const std::string&)"Wangtn"); std::cin.get(); }
直接写Print("Wangtn");的话会报错,因为string要在命名空间中使用,编译器会默认wangtn是char字符串,所以要进行强制类型转化,强制类型转化可以有两种转法
Print(std::string("Wangtn")); Print(Entity("Wangtn"));
通常情况下(更简洁的写法)
Entity a("Wangtn"); Entity b(22);
如果我们在类中使用隐式关键词
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) :m_Name("Unknow"),m_Age(age){} };
那么可以看到在主函数的调用中,直接填入数字的隐式方式将会失效
如果我想要不报错,那么必须要这么写
Entity b(26); Entity b=Entity(26);
无情的摸鱼机器