【发布时间】: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。