如何初始化const / non-const静态引用成员?

时间:2011-08-16 05:03:03

标签: c++

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进行更改以说明方法。

3 个答案:

答案 0 :(得分:10)

以初始化非参考static成员的方式相同:

//Foo.cpp

const Foo & FooA::m_foo = fooObj1; 
Foo & FooA::m_foo2 = fooObj2;

其中fooObj1fooObj2Foo类型的全局变量。

注意fooObj1fooObj2必须在m_foom_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...