1.explicit
通常,除非有明显的理由想要定义隐式转换,否则,单形参构造函数应该为explicit。
将构造函数设置为explicit可以避免错误,并且当转换有用时,用户可以显式的构造对象。
string null_book = "9_999_99999_9" item.same_isbn(sales_item(null_book));
2.隐式类型转换
可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换。
class sales_item{ public: sales_item(const是他的::string &book = " "):isbn(book),units_sold(0),revenue(0,0){} sales_item(std::istream &is); };
这里的每个构造函数都定义了一个隐式转换。因此咋i期待一个sales_item类型对象的地方,可以使用一个string或一个istream:
string null_book = ”99_999_9999_9" item.same_isbn(null_book);
这段程序使用了一个string类型对象作为实参传给sales_item的same_isbn函数。该函数期待一个salex——item对象作为实参。编译器使用接受一个string的sales_item构造函数从null_book生成一个新的sales_item对象。新生成的(临时的)sales_item被传递给same_isbn.
为转换而显示地使用构造函数
string null_book = "9_99"
item.same_isbn(sales_item(null_book));