per*_*oud 1 c++ casting implicit-conversion c++11
一直在用g ++ 5.3.1尝试C++ 11 ......我以为我理解了隐式转换运算符.一般来说,如果我定义Class3::operator Class2()那么我可以Class3 直接传递给任何需要的函数Class2.这似乎在99%的时间都有效......但我遇到了一个简单的例子,其中并非如此.
class Class1 {};
class Class2 {
public:
inline friend Class1 & operator<<(Class1 & a, Class2 const& c)
{return a;}
};
class Class3 {
public:
inline operator Class2() const {return Class2();}
};
void Foo(Class2 c) {}
int main()
{
Class1 c1;
Class3 c3;
// g++ does not like this:
// error: no match for 'operator<<' (operand types are 'Class1' and 'Class3')
// c1 << c3;
// g++ likes these just fine:
Foo(c3);
c1 << Class2(c3);
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么想法?请帮忙!谢谢.
friend在类定义中定义的函数,没有类外声明,仅对参数依赖查找可见,并且只有在定义它们的类是其中一个参数的关联类时才可见.
Class2不是Class1or 的关联类Class3,并且你operator<<没有在类外声明,因此找不到名称c1 << c3.在不知道operator<<存在这种情况的情况下,隐式转换根本不起作用.