class Foo {
private:
int m_i;
public:
Foo(int i) : m_i(i) {}
};
class FooA
{
private:
const static Foo & m_foo;
static Foo & m_foo2;
};
Q1>如何初始化const静态引用?
Q2>如何初始化非const静态引用?
注意: 您可以对类FooA进行更改以说明方法。
答案 0 :(得分:10)
以初始化非参考static
成员的方式相同:
//Foo.cpp
const Foo & FooA::m_foo = fooObj1;
Foo & FooA::m_foo2 = fooObj2;
其中fooObj1
和fooObj2
是Foo
类型的全局变量。
注意fooObj1
和fooObj2
必须在m_foo
和m_foo2
之前初始化,否则您可能会遇到static initialization order fiasco问题。
答案 1 :(得分:5)
与任何其他静态数据成员的方式相同:
Foo foo(5);
const Foo& FooA::m_foo(foo);
Foo& FooA::m_foo2(foo);
答案 2 :(得分:3)
初始化const和非const静态引用的方式与初始化任何静态成员的方式相同:将初始化放在全局范围内。
const Foo& FooA::m_foo = ...whatever...
Foo& FooA::m_foo2 = ...whatever...