gpt4 book ai didi

c++ - 在类中初始化固定大小的常量数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:48:05 25 4
gpt4 key购买 nike

考虑以下类:

class A {
const int arr[2];
public:
A() { }
};

是否可以从构造函数初始化列表或以任何其他方式而不是在声明它的行上初始化 arr(即 const int arr[2] = {1,2 };)?

请注意,我对适用于 C++98 的方法很感兴趣!

最佳答案

通过将它们包装在 struct 中,例如:

class A
{
struct Data
{
int arr[2];
};

Data const arr;
public:
A() : arr( someOtherStruct ) {}
};

这确实意味着要访问数据,您必须编写 arr.arr。可以通过继承 struct 来避免这种情况:

struct PrivateDataForA
{
int arr[2];
};

class A : private PrivateDataForA
{
public:
A() : PrivateDataForA( someOtherStruct ) {}
};

这确实使 struct 的名称在类外部可见(这可能是一个优势——客户端代码可以将一个作为参数)。

如果你手边没有结构的实例,说因为你想要用构造函数的参数计算的值填充它,你可以使用静态成员函数:

class A : private PrivateDataForA
{
static PrivateDataForA createInitializer( int a, int b );
public:
A( int a, int b ) : PrivateDataForA( createInitializer( a, b ) )
{
}
};

对于 OP 的具体示例:

#include <iostream>
#include <stddef.h>

typedef ptrdiff_t Size;
typedef Size Index;

template< class Element, Size n >
struct Array{ Element elem[n]; };

class A {
Array<int, 2> const arr_; // const int arr[2];

A& operator=( A const& ); // No such.

static Array<int, 2> const& oneAndTwo()
{
static Array<int, 2> const a = {1, 2};
return a;
}

public:
A(): arr_( oneAndTwo() ) {}
int at( Index i ) const { return arr_.elem[i]; }
};


int main()
{
using namespace std;

A o;
for( int i = 0; i < 2; ++i )
{
cout << o.at( i ) << endl;
}
}

关于c++ - 在类中初始化固定大小的常量数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8171967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com