C++ 在静态成员变量初始值设定项中,为什么调用静态成员函数(而不是全局函数)?

C++ 在静态成员变量初始值设定项中,为什么调用静态成员函数(而不是全局函数)?,c++,static,language-lawyer,static-methods,C++,Static,Language Lawyer,Static Methods,以下程序的输出应该是什么 #include<iostream> int foo() { return 10; } struct foobar { static int x; static int foo() { return 11; } }; int foobar::x = foo(); int main() { std::cout<<foobar::x<<endl; } #包括 int foo() { 返回10; }

以下程序的输出应该是什么

#include<iostream>

int foo()
{
  return 10;
}

struct foobar
{
  static int x;
  static int foo()
  {
    return 11;
  }
};

int foobar::x = foo();

int main()
{
  std::cout<<foobar::x<<endl;
}
#包括
int foo()
{
返回10;
}
结构foobar
{
静态int x;
静态intfoo()
{
返回11;
}
};
int foobar::x=foo();
int main()
{

std::cout因为初始值设定项表达式在struct
foobar
的范围内,所以这里将调用
foobar::foo()

从标准中,
$9.4.2/2静态数据成员[class.Static.data]

中的初始值设定项表达式 静态数据成员的定义在其类(3.3.7)的范围内。示例:

class process {
static process* run_chain;
static process* running;
};
process* process::running = get_main();
process* process::run_chain = running;
进程
的静态数据成员
运行链
在全局 范围;表示法
process::run\u chain
指定成员
run\u chain
是类
process
的成员,属于类的范围
进程
。在静态数据成员定义中,初始值设定项 表达式是指类
进程
的静态数据成员
正在运行
。 -[结束示例]