隐式类类型转换 [C++ Primer]

可以用单个形参来调用的构造函数定义了从形参类型到该类类型的一个隐士转换。

1 class  Sale_item{
2 
3  Sale_item(std::istream &s);
4 
5 };
6 
7 string null_isbn = "123456789";
8 item.same_isbn(null);

这段程序将string类型的参数传递给一个期待Sale_item类型参数的函数;

编译器会自动使用接受一个string对象的构造函数从null_isbn生成一个新的Sale_item对象,新生成的临时的Sale_item对象被传递给该函数。

1.可以再接受一个参数的构造函数前面加explicit来避免这种隐士的转换;

2.可以通过显示地使用构造函数来生成转换。

string null_isbn = "123456789";
item.same_isbn(Sale_item(null_isbn ));


除非有明显的额理由需要使用隐士转换,否则单形参构造函数应该总是声明为explicit(只出现在声明部分);
原文地址:https://www.cnblogs.com/cy568searchx/p/3014835.html