C++ 输入输出操作符与隐式转换
这个问题困扰了很久,夜不能寐。故此求教大神们!!
有如下代码:
class MyString // 一个字符串类,实现了 输入/输出 操作符的重载。
{
private:
...
public:
...
friend ostream& operator<<(ostream out,MyString &val);// 输出操作符重载
friend istream& operator>>(instream in,MyString &val);//输入操作符重载
MyString& operator<<(MyString &val);//流输入操作
MyString& operator<<(const char* val);
};// end
class Parameter//自定义的类,也重载了输入输出操作符
{
private:
...
public:
...
friend ostream& operator<<(ostream out,Parameter &val);//重载
friend istream& operator>>(istream in,Parameter &val);
operator MyString();
};//end
然后 问题就来了。
1.比如 我用
MyString temp;
Parameter para;
temp<<para;
是调用哪个重载函数?
a.MyString中的 MyString& operator<<(MyString &val) 然后编译器隐隐式的转换(MyString)para.
b.调用Parameter中重载的输入操作friend ostream& operator<<(ostream out,Parameter &val).将MyString转换为流?
[解决办法]
加上行标,自己是一下不就知道了吗,应该是编译错误,因为临时对象不能帮定到 non-const lvalue reference 上,把借口改正确以后,按顺序调用下面两个函数。
operator MyString();
MyString& operator<<(MyString const&);
[解决办法]
自己试一下就好了,基本就如楼上所说的。不过最好的话,还是禁止隐式转换比较好,有时候会发生问题,C++11支持用explicit来强调显示转换了,你可以试试看。