c++ - 如何初始化具有 const 变量的结构数组

标签 c++ struct

我有一个包含 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;
}

有什么方法可以制作具有常量变量的结构数组以及如何初始化它们?

最佳答案

您可以创建一个常量对象数组,但必须对其进行初始化。例如,对于您的结构,它应该是:

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

附带说明一下,与内置数组相比,您可能更喜欢 std::array

关于c++ - 如何初始化具有 const 变量的结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58119402/

相关文章:

c++ - C++ 中将内置类型 (int) 转换为 bool 的首选方法是什么?

c++ - 不完整类型、引用与指针的无效使用

c - 为什么灵活数组成员必须位于结构的末尾,但具有灵活数组的结构则不然?

使用 SWIG 的 C++ 类

c++ - 抽象类修复的虚析构函数是模糊的

c++ - 将无符号字节数组转换为结构数组

c++ - 如何在全局范围内初始化结构/类

c - 指针不指向

c - 32 位架构中的结构

c++ - 在光线追踪中对球体进行荒谬的反射