下面这个程序可以打印3,3,是我想要的结果。但是我还是想肯定一下,C++标准里面有没有这样规定?
struct s{
int *pi;
s(int* p):pi(p){printf("%d\n",pi[2]);}
};
struct s2{
s m_s;
int *pj;
s2(int* p):m_s(p),pj(m_s.pi){
printf("%d\n",pj[2]);
}
};
int main(void)
{
int ibuf[]={1,2,3};
s2 obj(ibuf);
return 0;
}
8 个解决方案
#1
我记得是按照在类的声明里从上到下的顺序初始化,和构造函数里写的顺序无关。
#2
声明的顺序
#3
初始化顺序与在类中声明的顺序有关.
#4
struct s{
int *pi;
s(int* p):pi(p){printf("%d\n",pi[2]);}
};
struct s2{
s m_s;
int *pj;
s2(int* p):m_s(p),pj(m_s.pi){
printf("%d\n",pj[2]);
}
};
这样写的话不是太清楚呢。C++中初始化列表是对于关键字class来说的呢。struct的初始化是C的标准。
#6
可以结贴了
#7
依赖成员变量声明次序,你这种初始化列表干脆别用,都用p就行了。
#8
C++里struct和class差别只有默认访问控制不同,其他完全一样
#1
我记得是按照在类的声明里从上到下的顺序初始化,和构造函数里写的顺序无关。
#2
声明的顺序
#3
初始化顺序与在类中声明的顺序有关.
#4
struct s{
int *pi;
s(int* p):pi(p){printf("%d\n",pi[2]);}
};
struct s2{
s m_s;
int *pj;
s2(int* p):m_s(p),pj(m_s.pi){
printf("%d\n",pj[2]);
}
};
这样写的话不是太清楚呢。C++中初始化列表是对于关键字class来说的呢。struct的初始化是C的标准。
#5
#6
可以结贴了
#7
依赖成员变量声明次序,你这种初始化列表干脆别用,都用p就行了。
#8
C++里struct和class差别只有默认访问控制不同,其他完全一样