cdsfiui 发表于 2016-06-08 09:14

C++标准有没有保证说,用{}/()初始化默认是赋0值?

问题1:
struct S
{
   size_t size;
   int j;
   int k;
   int l;
};

S s={sizeof(S)};
C++标准有没有说,上面这种{}的初始化方式,会把j,k,l都赋成0值?
标准文档里面有说道吗?

问题2:
int main()
{
    int* pi=new int;
    for(int i=0;i<5;++i)
      cout<<pi<<',';
    return 0;
}
这里pi的5个值都是没有初始化的,我运行的结果可能是:
6785200,6782912,0,0,0,

而如果我改成
int main()
{
    int* pi=new int();//use ()
    for(int i=0;i<5;++i)
      cout<<pi<<',';
    return 0;
}
这样,那么pi的5个元素打印出来就一定是0.

C++标准有没有规定指针数组也可以用()来赋值,()内不指定就是0?
很奇怪的是,如果我在括号里面指定一个初始值,例如7:
int* pi=new int(7);
那么这句话就编译不过了,为什么不行呢?
我希望把pi里面的元素都赋值为7,能否在初始化的时候就做到?

bruceteen 发表于 2016-06-08 09:41



为了凑字符,有下面三个初始化
zero-initialization
default-initialize
value-initialize

action08 发表于 2016-06-12 16:30

明明有一些简单的做法可以规避问题和风险,你偏偏要研究编译器行为


高级语言的习惯不能刻舟求剑哦
页: [1]
查看完整版本: C++标准有没有保证说,用{}/()初始化默认是赋0值?