【问题标题】:how to initialize array of structures having const variables如何初始化具有 const 变量的结构数组
【发布时间】:2019-09-26 14:47:12
【问题描述】:

我有一个包含 const 变量的结构数组; 我使用构造函数初始化列表进行初始化, 但是如果我制作该结构的数组,如何初始化该结构的数组的所有元素。 如果结构不包含 const var,那么很容易完成

如果结构体不包含 const var,那么很容易完成

#include<iostream>
struct s_Nconst{
    int num;
    int x1;
    // s_Nconst(int);
};
int main(){
    s_Nconst sN2;
    sN2.num=5;
    std::cout<<"initial values of num\t"<<sN2.num<<std::endl;   

    //making array of s_Nconst struct
    s_Nconst sN3[sN2.num];

    for(int i=sN2.num-1; i>-1; i--,++sN2.num){
        sN3[i].x1= sN2.num;
        std::cout<<"sn3["<<i+1<<"]\t"<<sN3[i].x1<<std::endl;
    }

    return 0;
}

但是如果假设结构由 const var 组成,那么我可以使用构造函数初始化器列表创建结构的单个对象,但是如果我要创建结构的数组,则会出错

#include<iostream>

struct s_const{
    const int x1,y1,z1;
    static int num;
    s_const(int,int,int);
};
s_const::s_const(int x,int y, int z)
        :x1(x),y1(y),z1(z) {

    std::cout<<"initial values of x1,y1,z1\t"<<this->x1<<" "<<this->y1<<" "<<this->z1<<std::endl;   
}


/*struct s_Nconst{
    int num;
    int x1;
    // s_Nconst(int);
};
 s_Nconst::s_Nconst(int x)
        :num(x){

    std::cout<<"initial values of num\t"<<this->num<<std::endl;   
} */


int main(){

    int a,b,c;
    a=1;b=2;c=3;
    s_const s1(a,b,c);

    //array of s1 is giving error
    s_const sc[3];




    //s_Nconst s2(++c);
    //s_Nconst sN2;
    //sN2.num=5;
    //std::cout<<"initial values of num\t"<<sN2.num<<std::endl;   

    //making array of s_Nconst struct
    //s_Nconst sN3[sN2.num];

    //for(int i=sN2.num-1; i>-1; i--,++sN2.num){
    //    sN3[i].x1= sN2.num;
        std::cout<<"sn3["<<i+1<<"]\t"<<sN3[i].x1<<std::endl;
    //}

    return 0;
}

有什么方法可以使结构数组具有 const 变量以及如何初始化它们?

【问题讨论】:

  • sN3[i].x1= sN2.num; 就像您在非const 示例中所做的那样,不是初始化。是任务。 s_const sc[3] = {s_const (1, 2, 3), s_const (4, 5, 6), s_const (7, 8, 9)}; 将是初始化。
  • 很难说出你真正想要做什么,因为有很多损坏的代码被注释掉了(留下一些剩余的代码损坏)。但一种选择是s_const sc[3]{ {1,1,1}, {1,1,1}, {1,1,1} };
  • s_Nconst sN3[sN2.num]; 无效并使用 VLA 扩展,首选std::vector
  • @DetectivePickachu 构造函数也可以初始化const 成员。 “当你宣布它们时,它们的价值就是它们在整个执行过程中的价值。” - 不正确
  • @DetectivePikachu 抱歉,但您的陈述完全错误。构造函数的作用就是设置所有成员的值,包括const-qualified。

标签: c++ struct


【解决方案1】:

您可以创建一个 const 对象数组,但它们必须被初始化。例如,对于您的结构,它应该是:

s_const sc[3] = {{1, 2, 3}, {3, 4, 5}, {6, 7, 8}};

附带说明,您可能更喜欢 std::array 而不是内置数组。

【讨论】:

  • 只是/可能/应该
猜你喜欢
  • 2014-08-08
  • 2011-06-08
  • 2014-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 2013-01-17
相关资源
最近更新 更多