C ++填充静态值数组

时间:2015-01-03 20:49:55

标签: c++

C我有

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

.h中的C ++中 - 我有

文件
private:
    unsigned long arr[256];

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

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

不起作用: - \

4 个答案:

答案 0 :(得分:1)

在构造函数中使用初始化列表:

// .h
class C
{
public:
    C();
private:
    unsigned long arr[256];
};

// .cpp
C::C() : arr{0x00000000L, 0x01020304L, 0x21223212L, ...} {}

请注意,std::array可能是一种替代方案,它具有更直观的语法并且可以分配。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

如果要更改值,那么您将需要C ++ 11,并且您应该能够以与C中相同的方式使用它 - 非静态非const成员变量的类内初始化是现在允许(您可能需要查看:C++11 allows in-class initialization of non-static and non-const members. What changed?)。

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

答案 3 :(得分:0)

这是标准的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;
}