c ++内联友元函数,与成员变量同名

时间:2013-07-25 19:41:05

标签: c++ inline member friend friend-function

这让我感到惊讶。这有效:

struct foo {
  int x;
  friend int x(foo f) { return f.x; }
  friend int y(foo f);
};

int y(foo f) { return x(f); } // no problem

但这是一个错误:

struct foo {
  int x;
  friend int x(foo f) { return f.x; }
  friend int y(foo f) { return x(f); } // error: invalid use of foo::x data member
};

为什么不允许这两种(dis)?

1 个答案:

答案 0 :(得分:3)

原因是在第一种情况下,友谊将函数声明注入到封闭的命名空间中,因此对x的全局范围调用只能看到一个x

在第二个示例中,x在该范围内具有两个含义:全局友元函数和变量(可能会影响全局友元函数)。