C++填充静态值数组

C++ populate array of static values

本文关键字:数组 静态 填充 C++      更新时间:2023-10-16

C我有

unsigned long arr[256]={0x00000000L,0x01020304L,0x21223212L,...}

在C++.h -文件 我有

private:
    unsigned long arr[256];

如何使用 256 个常量值填充它(最快的方式.cpp文件中?

arr[256]={...}
// and
arr={...}

不工作:-\

在构造函数中使用初始值设定项列表:

// .h
class C
{
public:
    C();
private:
    unsigned long arr[256];
};
// .cpp
C::C() : arr{0x00000000L, 0x01020304L, 0x21223212L, ...} {}

请注意,std::array 可能是语法更直观且可分配的替代方法。

如果你坚持使用纯数组,只需std::memcpy(&this->arr[0], &::initial_values_arr[0], sizeof (::initial_values_arr));

为什么要将常量数组作为成员变量?

如果要更改值,则需要 C++11,并且应该能够以与 C 中相同的方式使用它 - 现在允许非静态非常量成员变量的类内初始化(您可能想看看: C++11 允许非静态和非常量成员的类内初始化。发生了什么变化?).

如果你想要一个常量数组,如果你愿意,你仍然可以使用 C 样式(以及文件的全局或本地数组)。我并不是说这是好的风格,但编译器接受它。

这是

标准的C++代码:

class C
{
private:
    unsigned long arr[256] = {0x00000000L,0x01020304L,0x21223212L};
};
auto main() -> int
{
    C c; (void) c;
}

不幸的是,它无法使用Visual C++ 19.00.22310.1进行编译。解决方法:

#include <array>
class C
{
private:
    std::array<unsigned long, 256> arr;
public:
    C(): arr( {0x00000000L,0x01020304L,0x21223212L} ) {}
};
auto main() -> int
{
    C c; (void) c;
}