Chinaunix首页 | 论坛 | 博客
  • 博客访问: 988086
  • 博文数量: 158
  • 博客积分: 4380
  • 博客等级: 上校
  • 技术积分: 2367
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-21 10:45
文章分类

全部博文(158)

文章存档

2012年(158)

我的朋友

分类: C/C++

2012-11-23 16:02:09

此文有问题

struct foo
{
    int val;
};

#include

int main( void )
{
    using namespace std;

    foo* p1 = new foo();
    foo* p2 = new foo;

    foo* p3 = new foo[2]();
    foo* p4 = new foo[2];

    cout << p1->val << endl; // val被初始化为int(),即0
    cout << p2->val << endl; // val为随机值

//    cout << p3->val << endl; // val被初始化为int(),即0
//    cout << p4->val << endl; // val为随机值
   
    return 0;
}


2008-01-10:
ISO/IEC 14882:2003(E) 中 5.3.4 之 15
— If the new-initializer is omitted:
    — If T is a (possibly cv-qualified) non-POD class type (or array thereof), the object is default-initialized(8.5). If T is a const-qualified type, the underlying class type shall have a user-declared default constructor.
    — Otherwise, the object created has indeterminate value. If T is a const-qualified type, or a (possibly cv-qualified) POD class type (or array thereof) containing (directly or indirectly) a member of const-qualified type, the program is ill-formed;
— If the new-initializer is of the form (), the item is value-initialized (8.5);

阅读(1920) | 评论(14) | 转发(0) |
给主人留下些什么吧!~~

网友评论2012-11-23 16:03:46

nevergone
反汇编了一下
果然不一样。

网友评论2012-11-23 16:03:40

100000
new foo; 调用的不是默认构造函数吗?
那他调用的是什么?

网友评论2012-11-23 16:03:33

kzjeef
re 100000   
new foo() 调用默认构造函数啊 。。。。

网友评论2012-11-23 16:03:25

100000
为什么
new foo();

new foo;
会有这样的不同?

网友评论2012-11-23 16:03:16

jzhang
hehe