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;吧
...全文
189 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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下也通不过:(
「已注销」 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

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧