Chinaunix首页 | 论坛 | 博客
  • 博客访问: 988084
  • 博文数量: 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);

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

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

周星星
to usr_root: 人老了就容易忘事,过几天就删除

to sjdev&ouyx: 这是标准行为,如果你的编译器不是这样的话,说明你的编译器离标准还差得很远,你可以用 g++342 或 vc++2005 测试一下。
C++会为类生成缺省构造函数,因为其成员必须先成立而后类对象才能成立;
同时,C/C++也要求“不为不必要的功能支付代价”,所以……

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

ouyx
估计和编译器关系比较大

网友评论2012-11-23 16:02:53

sjdev
事实上,
我在vc6+sp6, windowsxp+sp2上测试,
结果都是随机值。

难道你又是在dev cpp上测试的?

网友评论2012-11-23 16:02:44

usr_root
貌似你以前说过了