从constructor参数中初始化const多维数组中的const多维数组

Initialize const multidimensional array in class initializer list from constructor arguments

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

我有一个包括const 2D值的类,我想在调用构造函数时定义此数组。有人告诉我在不应该更改的值上使用const是首选的,所以我想在这种情况下尝试。

class A {
  public:
    A(const int passedArray[2][2]) : memberArray(passedArray) {}
  private:
    const int memberArray[2][2];
};
const int passedArray[][2] = {
  {0,0},
  {0,1}
};
A a(passedArray); // fails with "incompatible types
                  //in assignment of 'const int (*)[2]' to 'const in[2][2]'
A a(&passedArray); // fails

这也因const int passedArray[2][2] = ...而失败,private: const int** memberArray等。

我知道我必须使用初始化列表,因为构造函数无法更改const的值。这根本可以在C 11?

对您的问题的评论有一些很好的信息。

之后,这是工作代码:

//g++  5.4.0
#include <iostream>
class A {
  public:
    A(int passedArray[2][2]) 
    {
        //USE STD COPY TO COPY THE ARRAYS. 
        std::copy(&passedArray[0][0], &passedArray[0][0]+4,&memberArray[0][0]);
        //PRINT VALUES TO TEST
        for (int i = 0; i < 2; i++)
        {
            for (int j = 0; j < 2; j++)
            {
                std::cout << memberArray[i][j] << std::endl;
            }           
        }
    }
  private:
    int memberArray[2][2];
};
int main()
{
     //INITIALIZE YOUR ARRAY
     int passedArray[2][2] = {
       {0,0},
       {0,1}
     };
     //CREATE OBJECT
     A a(passedArray); 
}

如果您的业务需要是"班级中的const多维数组"您必须这样做以下任何一种方法。

class A {
  public:
    A(const int passedArray[2][2]) 
    {
    }
  private:
    const int memberArray[2][2] = {{5,6},{7,8}};   //INITIALIZE HERE
};

class A {
  public:
    A(const int passedArray[2][2]) 
    {
    }
  private:
    //DECLARE STATIC HERE
    static const int memberArray[2][2];
};
//INTIALIZE HERE
const int A::memberArray[2][2] = {{5,6},{7,8}};