相同类型的c++类成员

c++ class member of same type

本文关键字:成员 c++ 同类型      更新时间:2023-10-16

我有以下情况:

class Foo
{
public:
  static const Foo memberOfFoo;
  ........
}

问题是我不能在声明它的同一行初始化它,我也不能在构造函数中通过Initializations List初始化它,有人知道该怎么做吗?

把这个放到类定义之外,然后:

const Foo Foo::memberOfFoo = whateverValue;

这是Foo::memberOfFoo的定义,它可以提供一个初始化器,并且必须进入.cpp文件(像任何其他对象的定义一样,它只能在整个程序中出现一次,否则你会得到链接器错误)。

有时你会发现代码没有定义它的静态数据成员:

struct A {
  // sometimes, code won't have an "const int A::x;" anywhere!
  static const int x = 42;
};

省略这样的定义只有在A::x从未被寻址且从未传递给引用形参时才有效。更正式的说法是:"当所有对A::x的使用都立即读取A::x的存储值"。这是许多静态整型常量的情况。

除了常量整型之外的类静态类型需要/可以在定义时初始化。您需要通过添加

在某处声明(并非如此)memberOfFoo。
const Foo Foo::memberOfFoo = /*construct here*/;

这是如何实现初始化…

class Foo
{
public:
    static const Foo memberOfFoo;
    Foo(int, double)
    {
        ...
    };
};
const Foo Foo::memberOfFoo(42, 3.141592654);
...