Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何初始化常量/非常量静态引用成员?_C++ - Fatal编程技术网

C++ 如何初始化常量/非常量静态引用成员?

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; }; 以同样的方式初始化非引用

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;
};

以同样的方式初始化非引用
静态
成员:

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...