我想了解以下代码行为
#define USE_FRIEND
class Foo
{
public:
template <typename T>
Foo& operator<< (T val)
{
std::cout << "Inside Foo" << std::endl;
return *this;
}
};
class A
{
public:
#ifdef USE_FRIEND
friend Foo& operator<<(Foo& f, A& a)
{
std::cout << "Inside A" << std::endl;
return f;
}
#endif
};
int main()
{
A a;
Foo f;
#ifdef USE_FRIEND
std::cout << " using Friend :: ";
#else
std::cout << " not using Friend :: ";
#endif
f << a;
system("pause");
return 0;
}
上述代码执行 2 次的输出,一次使用使用朋友,另一次不使用:
情况1:
using Friend :: Inside A
案例2:
not using Friend :: Inside Foo
我可以理解案例 2,但任何人都可以解释案例 1