C++ 填充静态值数组
C++ populate array of static values
在C
我有
unsigned long arr[256]={0x00000000L,0x01020304L,0x21223212L,...}
在 .h
中的 C++ 文件中
private:
unsigned long arr[256];
如何使用 256 个常量值在 .cpp
文件中填充它(最快的方法)?
arr[256]={...}
// and
arr={...}
不工作:-\
如果您坚持使用普通数组,只需std::memcpy(&this->arr[0], &::initial_values_arr[0], sizeof (::initial_values_arr));
为什么要有一个常量数组作为成员变量?
如果要更改值,那么您将需要 C++11,并且您应该能够像在 C 中一样使用它 - in-class 非静态初始化现在允许非常量成员变量(您可能想看看:C++11 allows in-class initialization of non-static and non-const members. What changed?)。
如果你想要一个常量数组,你仍然可以使用 C 风格(以及文件的全局或局部数组),如果你愿意的话。
我不是说它是好的风格,但编译器接受它。
在构造函数中使用初始化列表:
// .h
class C
{
public:
C();
private:
unsigned long arr[256];
};
// .cpp
C::C() : arr{0x00000000L, 0x01020304L, 0x21223212L, ...} {}
请注意,std::array
可能是一种替代方法,它具有更直观的语法并且可分配。
这是标准的 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;
}
在C
我有
unsigned long arr[256]={0x00000000L,0x01020304L,0x21223212L,...}
在 .h
中的 C++ 文件中
private:
unsigned long arr[256];
如何使用 256 个常量值在 .cpp
文件中填充它(最快的方法)?
arr[256]={...}
// and
arr={...}
不工作:-\
如果您坚持使用普通数组,只需std::memcpy(&this->arr[0], &::initial_values_arr[0], sizeof (::initial_values_arr));
为什么要有一个常量数组作为成员变量?
如果要更改值,那么您将需要 C++11,并且您应该能够像在 C 中一样使用它 - in-class 非静态初始化现在允许非常量成员变量(您可能想看看:C++11 allows in-class initialization of non-static and non-const members. What changed?)。
如果你想要一个常量数组,你仍然可以使用 C 风格(以及文件的全局或局部数组),如果你愿意的话。 我不是说它是好的风格,但编译器接受它。
在构造函数中使用初始化列表:
// .h
class C
{
public:
C();
private:
unsigned long arr[256];
};
// .cpp
C::C() : arr{0x00000000L, 0x01020304L, 0x21223212L, ...} {}
请注意,std::array
可能是一种替代方法,它具有更直观的语法并且可分配。
这是标准的 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;
}