Table of Contents
#custom-toc-container
隐式转换 & explicit
# 隐式类型转换(Implicit Conversion) 和 强制类型转换(Explicit Conversion) 隐式类型转换,编译器根据上下文自动进行。 强制类型转换,需要通过显式的类型转换语法(如 (type)value 或 static_cast
(value))来完成。 # 隐式构造函数 隐式构造函数:当存在重载构造函数时,编译器根据构造函数形参类型 和 赋值(=)初始化参数类型,自动调用不同的构造函数。 ```cpp class Entity { private: std::string m_name; int m_age; public: Entity(std::string name) // 构造函数1 : m_name(name), m_age(-1) {} Entity(int age) // 构造函数2 : m_name("Unknown"), m_age(age) {} }; int main() { Entity e1 = "JiuYu"; // 自动调用“构造函数1” Entity e1 = 26; // 自动调用“构造函数2” return 0; } ``` # explicit关键字 explicit,可以禁用隐式转换。 在构造函数前放上`explicit`关键字,可以禁用构造函数的隐式转换。 ```cpp class Entity { private: std::string m_name; int m_age; public: explicit Entity(std::string name) // 构造函数1 : m_name(name), m_age(-1) {} explicit Entity(int age) // 构造函数2 : m_name("Unknown"), m_age(age) {} }; int main() { // Entity e1 = "JiuYu"; // 错误。隐式转换被禁用 // Entity e1 = 26; // 错误。隐式转换被禁用 Entity e1("JiuYu"); // 自动调用“构造函数1” Entity e1(26); // 自动调用“构造函数2” return 0; } ```