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

In static member variable initializer why is static member function (not the global one) called?

本文关键字:函数 静态成员 调用 全局 为什么 变量      更新时间:2023-10-16

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

#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;
}

我已经运行了程序,但得到了答案11,但我认为正确的答案应该是10。我不知道为什么int foobar::x = foo();中的foo()应该是静态函数,请帮助我理解这一点。关于静态函数使用的更多示例将是首选!

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

从标准来看,$9.4.2/2 Static data members [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_chain在全局范围符号CCD_ 10指定成员run_chain是类process的成员,在类的范围内process。在静态数据成员定义中,初始值设定项表达式是指类CCD_ 15的静态数据成员CCD_。--结束示例]