可以通过将构造函数声明为explicit,来防止在需要隐式转换的上下文中使用构造函数。explicit关键字只能用于类的内部构造函数声明上,在类的定义体外不再重复
class Sales_item
{
public:
Sales_item(const string &book=""):isbn(book),units.sold(0),revenue(0.0){}
};
string null_book="9-19";
item same_isbn(null_book);
这段程序使用一个string类型对象作为实参传给Sales_item的same_isbn函数。编译器使用接受一个string的Sales_item被传递给Sales_isbn.
使用explicit后,构造函数不能用于隐式创建对象
item.same_isbn(null_book); //error:string constructor is explicit
使用显示的构造函数:
string null_book="9-19";
item.same_isbn(Sales_item(null_book)); //ok