如何在构造函数中初始化int const * const

How to initialize a int const * const in constructor?

本文关键字:const int 初始化 构造函数      更新时间:2023-10-16

exp。我有一个

class foo{
    public:
      int const * const array;
      size_t const length;
}

构建后这些变量不应发生任何更改,包括任何成员方法,但每个人都应访问这些变量,因此它们应该是恒定的。

但是在构造函数中,我需要先确定长度,然后才能初始化数组,

此外,我需要调用一个函数来分配内存位置,而不仅仅是new,因为此类是通向巨大不透明数据结构的桥梁,并且该内存由该人管理。(考虑STH。v8(。

如何初始化?

P.S。让我们只调用分配器void * bar(size_t),然后构造函数(也许(看起来像:

foo(size_t const len, int const *arr) {
    this->array = reinterpret_cast<int *> (bar(len));
    this->length = len;
    for(size_t i = 0; i < len; i++) array[i] = arr[i];
}

您需要使用构造函数的成员初始化器列表这样:

class Test {
    public:
    Test(size_t length): length(length), array(func_to_allocate(length)) {}
    size_t const length;
    int const * const array;
};

注意:构造函数{}的正文中没有任何初始化发生在运行之前

如果出于某种原因,您无法重新排列成员(或者这样做是没有帮助的(,那么这就是答案。如果您可以重新排列成员,并且这样做很有帮助,那么Galik的答案就优越了。

很难从您的问题中分辨出来,但是我要进行一系列狂野的猜测,然后显示由此产生的代码:

class bridge {
public:
  int const * const array;
  size_t const length;
  bridge(const sourceType& source);
private:
    static int const* init_array(const sourceType& source);
};
int const* bridge::init_array(const sourceType& source) {
    int len = source.getLength();
    int* arr = static_cast<int*>(bar(len));
    fill(arr, len);
    return arr;
}
bridge::bridge(const sourceType& source) :
    array(init_array(source)),
    length(source.getLength())
{}

看起来可行?

您应该在初始化器列表中初始化成员:

foo(size_t const len, int const *arr)
  : array(reinterpret_cast<int*>(bar(len))),
    length(len)
{
    for(size_t i = 0; i < len; i++) array[i] = arr[i];
}

您可以使用 g++ -Weffc++ 或您的编译器的等效方式来帮助自己正确解决此问题。