什么是隐式类型转换
#include<iostream>
#include<string>
using namespace std;
class Person
{
public:
Person(const string& n){
name=n;
cout<<"convert constructor used"<<endl;
}
private:
string name;
};
void f(Person s){
}
int main(int argc, char* argv[])
{
Person p("foo");
f(p);
string b="hehe";//invoked convert constructor
f(b);
return 0;
}
代码中以string 来调用f只要类Person有Person(const string&n)构造函数编译器就会在string对象上调用该转型构造函数来构造一个Person对象.这就称作Person类的转型构造函数支持隐式类型转换。
隐式转换有时也会产生无法预料的错误并且难以察觉,可在构造函数前面添加explicit关键字来关闭隐式转换。