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因为初始值设定项表达式在structfoobar
的范围内,所以这里将调用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
的成员,属于类的范围
进程
。在静态数据成员定义中,初始值设定项
表达式是指类进程
的静态数据成员正在运行
。
-[结束示例]