C++:构造函数中的多维数组初始化

标签 c++ arrays multidimensional-array

我想在 C++ 中使用一个固定大小的二维数组作为类成员。不过,我在构造函数中初始化它时遇到问题。

这是我的非工作尝试:

1.)

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

A::A() {
a = {{1,2},{2,4}};
}

产生:错误:从初始化列表分配给数组

2.)

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

A::A() {
int b[2][2] = {{1,2},{2,4}};
a = b;
}

产生:无效的数组赋值

3.)

class A {
 public:
  int **a;
  A();
};

A::A() {
int b[2][2] = {{1,2},{2,4}};
a = b;
}

yields: 无法在赋值中将‘int [2][2]’转换为‘int**’

我来自C背景。我知道我可以使用 std::vector 并且我知道这种方法的缺点,但是因为这对我来说是一个练习,所以我想知道如何让它与普通数组一起工作。我应该补充一点,我想稍后处理这个数组。我想更改存储的值,但不是大小。也许这也很重要(我想在正确的地方使用 const 会有所帮助?)。

最佳答案

如果你有 C++11,你可以在构造函数定义中使用这个语法:

A() : a{{1,2}, {3, 4}} {}

如果你没有 C++11,你将需要坚持那些邪恶的旧方法:

A() {
  a[0][0] = 1;
  // etc
}

第一个示例还使用构造函数初始化列表,它应该始终用于初始化成员而不是在构造函数主体中初始化它们。

关于C++:构造函数中的多维数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22975215/

相关文章:

jquery - 在 Jquery 中的特定索引处输出 HTML

python - 在Python中创建具有特定条件的矩阵

java - 改进从 Java 中的文本文件中提取数据

c - 交换函数中的二维数组引用

c++ - ptrdiff_t typedef 冲突 - google-test 和 intel anaconda

c++ - 使用 Xcode 构建多平台 C++ 库的简便方法

c++ - gcc5.2 abi 更改 -> 兼容性有保证吗?

c++ - concurrent_vector 在 parallel_for ( PPL ) 中不起作用

c - 3D数组的动态内存分配

PHP - 重新格式化多维数组以插入到 MYSQL 中?