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;
};
问题1> 如何初始化const静态引用?
问题2> 如何初始化非const静态引用?
注: 您可以更改FooA类以说明这些方法。
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;
};
问题1> 如何初始化const静态引用?
问题2> 如何初始化非const静态引用?
注: 您可以更改FooA类以说明这些方法。
static
成员变量相同方式进行初始化://Foo.cpp
const Foo & FooA::m_foo = fooObj1;
Foo & FooA::m_foo2 = fooObj2;
其中fooObj1
和fooObj2
是类型为Foo
的全局变量。
请注意,在初始化m_foo
和m_foo2
之前必须先初始化fooObj1
和fooObj2
,否则您可能会面临静态初始化顺序混乱问题。
Foo foo(5);
const Foo& FooA::m_foo(foo);
Foo& FooA::m_foo2(foo);
const Foo& FooA::m_foo = ...whatever...
Foo& FooA::m_foo2 = ...whatever...
const Foo&FooA :: m_foo = Foo(10); Foo&FooA :: m_foo2 = Foo(10);
- q0987m_foo
。不要这样做。请改成这样:Foo foo1(10), foo2(20); const Foo & FooA::m-foo=foo1; Foo & FooA::m_foo2=foo2;
- NawazFoo& FooA :: m_foo2 = Foo(10);
,因为它无法编译,试图将临时对象绑定到非const引用是不可能的。 - Nawaz