以下程序的输出应该是什么?
#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
。我不知道为什么foo()
int foobar::x = foo();
应该是静态函数,请帮助我理解这一点。关于使用静态函数的更多例子将是首选!
答案 0 :(得分:3)
因为初始化表达式在struct 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;
类
run_chain
的静态数据成员process
在全局中定义 范围;符号process::run_chain
指定该成员run_chain
是类process
的成员,属于类的范围process
。在静态数据成员定义中,初始化程序 expression指的是类running
的静态数据成员process
。 - 例子]