注册 登录
编程论坛 C++教室

有个问题请教一下

asd6791868 发布于 2008-12-05 20:11, 793 次点击
#include "iostream"
using namespace std;
void main ()
{ int *pia2 = new int[10] ();
       while(*pia2)
       {cout<<*pia2++<<endl;
}
}

书上说int *pia2 = new int[10] ();
在后面加个()可也初始化*pia2
我怎么不能呢??
6 回复
#2
chenbiancheng2008-12-05 20:19
是在什么环境下运行的?不同的运行环境有不同的规定,看和书上的是不是一样.
#3
debroa7232008-12-05 20:59
int这样的基本数据类型,在新的C++运行库中,是以类的形式存在的,对一些运算符做了重载,所以可以当做类来初始化,但早期的C库是不能的.如:
int i(10);//这样就是调用了构造函数,初始化为10了.
而new 也有变化,new[]的原型和new的原型如下:
void *__CRTDECL operator new[](size_t count) _THROW1(std::bad_alloc)
    {    // try to allocate count bytes for an array
    return (operator new(count));
    }
void *__CRTDECL operator new(size_t size) _THROW1(_STD bad_alloc)
        {       // try to allocate size bytes
        void *p;
        while ((p = malloc(size)) == 0)
                if (_callnewh(size) == 0)
                {       // report no memory
                static const std::bad_alloc nomem;
                _RAISE(nomem);
                }

        return (p);
        }
//可以这样做:
int* a = new int();//分配一个元素的int数组,初始化为0
int* b = new int(100); //分配一个元素的int数组,初始化为100
int* c = new int[20]();//分配20元素的int数组,所有元素初始化为0
int* d = new int[20](100); //这样做是错误的,不能初始化.

早期的C库没有这样定义new的函数,所以不能,和系统没有关系.如果你使用新的C++库,或者将new按上面的方式做重载,就可以这样做了.
该new的定义在文件"newaop.cpp"和"new.cpp"中,

[[it] 本帖最后由 debroa723 于 2008-12-5 21:02 编辑 [/it]]
#4
debroa7232008-12-05 21:02
!!!!

[[it] 本帖最后由 debroa723 于 2008-12-5 21:04 编辑 [/it]]
#5
asd67918682008-12-06 10:58
谢谢斑竹
#6
asd67918682008-12-06 10:58
谢谢斑竹
#7
hitcolder2008-12-07 11:52
回复 第3楼 debroa723 的帖子
受教了,不过函数原型看不太明白啊
1