如何初始化私有多维数组

How to Initialize a Private Multidimensional Array

本文关键字:数组 初始化      更新时间:2023-10-16

如何初始化一个私有数组,其中一百项每个等于一个两项数组,例如{-1, 0}。我下面的代码显然不工作,因为我问你所有。

example.h:

#ifndef EXAMPLE
#define EXAMPLE
class Example {
private:
    char grid[10][10];
public:
    Example();
};
#endif

example.cpp:

#include "example.h"
#include <iostream>
Example::Example() : grid({-1, 0}) {}

这在c++中目前是不可能的。在c++ 0x中,可以使用大括号,如

Example::Example() : grid{{-1, 0}} {}

目前,您可以将该数组包装在一个类中,而不会造成任何性能损失(该数组仍将是一个普通的本地多维数组)

class Example {
private:
    struct data {
      char grid[10][10];
      static data newData() {
        data d = {{
          { -1, 0 }, { -2, 1 } /* ... */
        }};
        return d;
      }
    } d;
public:
    Example() : d(data::newData()) { }
};

不幸的是,您不能这样初始化成员。你必须使用std::fill(或旧的=和循环)手动为构造函数体中的每个值赋值。

这将在c++ 0x中改变,但是,在c++ 0x中,您可以编写像您发布的代码一样的代码。

(另外,你的问题不匹配。您声明了一个由10个数组组成的数组,每个数组有10个字符,但是您的初始化尝试与该用例没有任何相似之处。这不是很清楚你想做什么,但由于你必须使用不同的方法,我想这对这个答案并不重要