“可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换”引自C++primer
先看一个例子:
#include <string>
#include <iostream>
using namespace std;
class Fruit //定义一个类,名字叫Fruit
{
string name; //定义一个name成员
string colour; //定义一个colour成员
public:
bool isSame(const Fruit &otherFruit) //期待的形参是另一个Fruit类对象,测试是否同名
{
return name == otherFruit.name;
}
void print() //定义一个输出名字的成员print()
{
cout<<colour<<" "<<name<<endl;
}
Fruit(const string &nst,const string &cst = "green"):name(nst),colour(cst){} //构造函数
Fruit(){}
};
int main()
{
Fruit apple("apple");
Fruit orange("orange");
cout<<"apple = orange ?: "<<apple.isSame(orange)<<endl; //没有问题,肯定不同
cout<<"apple = /"apple/" ?:"<<apple.isSame(string("apple")); //用一个string做形参?
return 0;
}
正如书中所言,apple.isSame(string("apple"))过程实际是string("apple")这个实参和Fruit类单个形参的构造函数是同一类型,会调用这个构造函数生成一个Fruit类供apple.isSame()函数使用。