статическая функция-член класса, выбранная вместо глобальной функции с тем же именем?

Сомнение возникло отсюда


int g() {
   cout << "In function g()" << endl;
   return 0;
}

class X {
public:
  static int g() {
     cout << "In static member function X::g()" << endl;
     return 1;
  }
};

class Y: public X {
   public:
  static int i;
};

int Y::i = g();   

изначально я думал, что разрешение символа происходит из внутренней области во внешнюю область видимости, поэтому будет вызываться x :: g ().
но затем я внимательно заметил код

int Y::i = g();

, как мы можем получить доступ к X :: g () без области видимости имен?
И область, в которой находится этот оператор, должна быть глобальной, а не Y :: или X ::, поэтому разрешение символа должно давать глобальную версию функции g ()?

10
задан Amar 29 April 2011 в 08:57
поделиться