C++ 如何初始化常量/非常量静态引用成员?
Q1>如何初始化常量静态引用 Q2>如何初始化非常量静态引用 注:C++ 如何初始化常量/非常量静态引用成员?,c++,C++,Q1>如何初始化常量静态引用 Q2>如何初始化非常量静态引用 注: 为了说明这些方法,您可以对类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; }; 以同样的方式初始化非引用
为了说明这些方法,您可以对类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;
};
以同样的方式初始化非引用
静态成员:
Foo foo(5);
const Foo& FooA::m_foo(foo);
Foo& FooA::m_foo2(foo);
其中fooObj1
和fooObj2
是Foo
类型的全局变量
注意fooObj1
和fooObj2
必须在m_-foo
和m_-foo2
之前初始化,否则可能会遇到问题。初始化常量和非常量静态引用的方式与初始化任何静态成员的方式相同:将初始化放在全局范围内
//Foo.cpp
const Foo & FooA::m_foo = fooObj1;
Foo & FooA::m_foo2 = fooObj2;
+对于//Foo.cpp注释为1(这些赋值应该在源文件中,而不是在头文件中),对于关于静态初始化顺序失败问题的注释为+1。@Nawaz,您认为以下代码合法吗<代码>常量Foo&FooA::m_Foo=Foo(10);Foo&FooA::m_foo2=Foo(10)代码>@q0987:你试过编译它吗?它编译成功了吗?第一行将编译,但您将无法使用mufoo
。不要那样做。这样做国际广告:foofoo1(10),foo2(20);常量Foo&FooA::m-Foo=foo1;Foo&FooA::m_foo2=foo2代码>@Nawaz,为什么我不能用这个?如果我理解正确,m_foo延长了foo的寿命(10)。对吗感谢you@q0987:是的。你说得对。我想说:不要这样做:Foo&FooA::m_foo2=Foo(10)代码>。。因为它不会编译,因为它试图将临时引用绑定到非常量引用,这是不可能的。
const Foo& FooA::m_foo = ...whatever...
Foo& FooA::m_foo2 = ...whatever...