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

构造函数初始化表问题

lixang 发布于 2007-01-24 20:09, 790 次点击
tempalte<class T,class Alloc=alloc, size_t BufSize=0>
class deque
{
......................//构造函数 //初始化表
deque (int n,const value_type &value) :start (),finish(),map(0),map_size(0)
{...................................}
//start 是指针,finish是指针,map指针的指针
...................................................//上面对start 是指针赋值为()空括号是什么意思
//对指向指针的指针map赋值为0如何解释呢?
}

[此贴子已经被作者于2007-1-24 20:10:23编辑过]

7 回复
#2
蓝鹰2007-01-24 22:54
deque (int n,const value_type &value) :start (),finish(),map(0),map_size(0)
{...................................} start ()表示不对start进行初始化,不写也可以,map赋值为0表示map不指向任何地址,为防止对不确定的map地址进行操作而使系统受到破坏,才用0赋值。

等同于:

deque (int n,const value_type &value) {
map=0;
map_size=0;
......
}
#3
tyc6112007-01-25 00:54
以下是引用lixang在2007-1-24 20:10:00的发言:
tempalte<class T,class Alloc=alloc, size_t BufSize=0>
class deque
{
......................//构造函数 //初始化表
deque (int n,const value_type &value) :start (),finish(),map(0),map_size(0)
{...................................}
//start 是指针,finish是指针,map指针的指针
...................................................//上面对start 是指针赋值为()空括号是什么意思
//对指向指针的指针map赋值为0如何解释呢?
}

start()就相当于start(0)

#4
xdztc2007-01-25 09:58
start()就不相当于start(0) start()与start(0)是有很大的不同的

#5
tyc6112007-01-25 12:46
以下是引用xdztc在2007-1-25 9:58:00的发言:
start()就不相当于start(0) start()与start(0)是有很大的不同的

“值初始化”()包括两种情况,如果是内置类型,则初始化值为0;如果是类类型,则调用默认构造函数。
这儿的start为指针,所以初始化为0,start()也就相当于start(0)

#6
song42007-01-25 18:24
类域内的指针都是用NULL默认初始化
#7
tyc6112007-01-25 23:31
以下是引用song4在2007-1-25 18:24:00的发言:
类域内的指针都是用NULL默认初始化

错了,别误导,类的未初化非静态成员变量,其值是未知的(没有初始化值),当然也包括指针变量

附个测试代码:

#include <iostream>
using namespace std;

class Test {
public:
void Run() {
cout<<"Value of a pointer: "<<p<<endl;
}
private:
int *p;
};

int main() {
Test tt;
tt.Run();

return 0;
}


[此贴子已经被作者于2007-1-25 23:32:03编辑过]

#8
lixang2007-01-26 12:22
以下是引用xdztc在2007-1-25 9:58:00的发言:
start()就不相当于start(0) start()与start(0)是有很大的不同的

问题:
1: 既然start()就不相当于start(0),那么就是说start()没有对start进行赋值;
但是在使用指针时如果不进行初始化会出问题的:那么如何解释呢?
2: 那么究竟对指针是赋值为Null还是为0呢?具体有和规定?

1