- c++允许编译器对代码执行一次隐式转换。
-
#include<iostream> #include<string>class Entity { public:std::string name;int age;Entity(int x) {age = x;}Entity(std::string x){name = x;} }; void PrintEntity(Entity e) {std::cout << e.age << ":" << e.name << std::endl; } int main() {PrintEntity(20); //隐式转换,调用Entity(int x)构造函数将20隐式转换为Entity对象PrintEntity(std::string("pcop")); //隐式转换,调用Entity(std::string x)构造函数将"20"pcop"隐式转换为Entity对象std::cin.get();return 0; }
-
#include<iostream> #include<string>class Entity { public:std::string name;int age;Entity(int x) {age = x;}Entity(std::string x){name = x;} }; void PrintEntity(Entity e) {std::cout << e.age << ":" << e.name << std::endl; } int main() {PrintEntity(20); //隐式转换,调用Entity(int x)构造函数将20隐式转换为Entity对象PrintEntity(std::string("pcop")); //隐式转换,调用Entity(std::string x)构造函数将"20"pcop"隐式转换为Entity对象PrintEntity("pcop"); //报错,因为pcop时const char*类型的,编译器调用隐式转换将时const char*类型转换为string,但仅能隐式转换一次,故编译器不能将string类型隐式转换为Entity类型std::cin.get();return 0; }
-
explicit关键字放在构造函数前面,意味着该构造函数不允许进行隐式转换。示例如下:
-
#include<iostream> #include<string>class Entity { public:std::string name;int age;explicit Entity(int x) {age = x;}Entity(std::string x){name = x;} }; void PrintEntity(Entity e) {std::cout << e.age << ":" << e.name << std::endl; } int main() {PrintEntity(20); //不能进行隐式转换,因为调用Entity(int x)构造函数前面有explicit关键字PrintEntity(std::string("pcop")); //隐式转换,调用Entity(std::string x)构造函数将"20"pcop"隐式转换为Entity对象std::cin.get();return 0; }