c++ primer的一個問題

flypig2003 2004-12-14 12:52:22
c++primer习题3.3
int ival( int() );
候捷译的习题集说它是可以的??
可是我在c++ builderX link不能通过
Error: Unresolved external 'ival(int (*)())' referenced from 。。。。
不知道大家用vc或者别的可以吗??

我想int ival( int() );这个意思是int ival=0;吧
...全文
167 点赞 收藏 9
写回复
9 条回复
flypig2003 2004年12月14日
没想到大家这么热情
呵呵
还是下个别的complier吧
呵呵
pdaliu(pda)和我的意思最接近了,谢谢 kay_zlc(小K)及 LiJianHeng()
还有各位
呵呵
回复 点赞
huangk 2004年12月14日
不管是函数声明,还是变量定义,各个编译器的解释各不相同,我觉得象这样摸棱两可的程序,还是尽量避免为好!把程序的意图表现的明显一些。
回复 点赞
kay_zlc 2004年12月14日
补充:
int func( int (*pf)() ) 可以写成
int func( int pf() ) 这里pf是隐式的指针,所以也可以写成
int func( int () )

所以BCB6对int ival( int() )的解释为int ival( int(*) () )

为了防止BCB6对其这样解释,可以这样写int ival( (int() ) ),对int()加括号以防止BCB6解释它为函数的定义,但这样在BCB6下也通不过:(
回复 点赞
LiJianHeng 2004年12月14日
请看如下代码(可编译通过):
int ival0()
{
return 0;
}

int ival1(int)
{
return 1;
}
void main()
{
int ival( int() );

ival1(ival); //若改为ival0,则无法编译
}

由此可知,int ival( int() ) ;只是定义了一个整型变量。
一般的局部变量,如int ival;是不初始化的,编译器只分配空间。
而int ival( int () );被初始化为0;
在vc++6.0中。
回复 点赞
pdaliu 2004年12月14日
几位理解错了!~楼主所说的是~

变量的初始化!

C++初始化分为显示(也就是int a=12;)和隐示(也就是int a(12);//初始值被放在括号里)

而每种类型都有一个内置构造函数!如int a=int();//把a初始成0的值!

如果写成
int val(int());//这样是可以编译的!
cout<<val;//如果再加上这句,就会在这里出错!我用dev就是这样!
回复 点赞
xmlhb 2004年12月14日
回复 点赞
kay_zlc 2004年12月14日
我用VC6通过

用BCB6 BUILD时有错,BCB6的complier实在是差
BCB6的complier将表达式int ival( int() )解释成省略参数名的函数定义int ival( int (*)() )
所以出错。

由于函数的参数名可以省略,即int func(int i)可写成int func(int ),
但也不应该将int()解释成int(*)(),看来最好不要用BCB来编译^_^
回复 点赞
avalonBBS 2004年12月14日
dev c++ and vc6 都可通过
回复 点赞
carylin 2004年12月14日
是个函数声明吧。ival是函数名,返回int型数据,形惨是int
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告