int (*test) ();这句话能产生两个歧义么?

gattuso8 2008-10-08 04:04:56
如题,看一本书上说int (*test)();可以在C++里产生歧义
我理解test可以理解为指针想函数的指针。
书中还提到
可以理解一个函数调用?哪个老大知道这句作为函数调用如何理解?
...全文
283 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
oldnwind 2008-10-09
  • 打赏
  • 举报
回复
就12楼代码,编译和运行均正常。

但代码中的int(*test)();还是应该理解为函数指针声明。

只是这里在声明之后未明确赋值,貌似"野"指针(虽似"野"指针,但
指向又是确定的,即test函数的地址),所以后续要利用该"野"指针
进行函数调用时将引发内存访问违规。

作为函数调用,应该是(*test)();或test();形式。上述形式虽能通过
编译和运行,但一是没见过哪里有,二是并未实际执行test函数。

所以个人理解,该语句不会有“函数调用”的含义。
xiaokuer 2008-10-09
  • 打赏
  • 举报
回复
那个int是指指针调用函数后返回数据的类型。应该没有第2个意思吧
Big鹏 2008-10-09
  • 打赏
  • 举报
回复


1,首先,这是一个函数指针;
2,也可以做为函数调用。比如:
int test()
{
printf("hello,world!");
}

调用1:test();
调用2:(test *)(); //这样是完全可以嘀!

myiecs 2008-10-09
  • 打赏
  • 举报
回复
我只是平时的作业 放在上面噢.
sxbluebird 2008-10-09
  • 打赏
  • 举报
回复
应该不过吧;
可以先定义一下:typedef int (*test)();
这样就没有歧义了
  • 打赏
  • 举报
回复
因为前面有int,编译器会认为是个声明,所以不会有二义性。估计楼主看的是<<C专家编程那本吧>>,<<深度探索c++对象模型>>也有。
taodm 2008-10-09
  • 打赏
  • 举报
回复
可以去看《C++程序设计陷阱》这本书,专门讲解这些超级变态问题的。
C++标准在制定的时候就发现了这些天然2义性,所以做了一些额外规定。

类似的还有
struct T{。。。};

int main(int argc, char *argv[])
{
T T;
T * T;
所以,C++规定了函数申明、运算式、变量申明的优先级顺序。
OpenHero 2008-10-09
  • 打赏
  • 举报
回复

#include <stdio.h>
int test()
{
//printf("hello world!\n");
return 0;
}

int main(int argc, char* argv[])
{
int (*test)();
return 0;
}
hemiya 2008-10-09
  • 打赏
  • 举报
回复
在这里test是一个返回类型为int,参数为空的函数的指针.
语法上没二义性.
ysuliu 2008-10-09
  • 打赏
  • 举报
回复
LZ你看的什么书啊?这么有深度?
说出来听听
太乙 2008-10-09
  • 打赏
  • 举报
回复
没见过,期待高手!
gattuso8 2008-10-09
  • 打赏
  • 举报
回复
貌似没第二种解释?
gattuso8 2008-10-09
  • 打赏
  • 举报
回复
我是楼主,我比较同意19楼的说法
12楼的代码 我编了一把 确实是按照声明而不是调用函数处理的。
现在看 这句话应该不会产生歧异吧

PS,14楼的,我在看的确实是《深度探索c++对象模型》
lovely_小许 2008-10-08
  • 打赏
  • 举报
回复
up up
gattuso8 2008-10-08
  • 打赏
  • 举报
回复
晕 帮忙解释下怎么理解成函数调用的
那个int有点刺眼。。。
hhyttppd 2008-10-08
  • 打赏
  • 举报
回复
想象不到,UP

OpenHero 2008-10-08
  • 打赏
  • 举报
回复
可以
gattuso8 2008-10-08
  • 打赏
  • 举报
回复
哦 对了 忘了说了
这本书指的是编译器扫描过程~

理论上将
如果条件允许
能理解为某种函数调用么
taodm 2008-10-08
  • 打赏
  • 举报
回复
关键是test是第一次出现还是前面已经有定义。
lbh2001 2008-10-08
  • 打赏
  • 举报
回复
不可能,不会产生歧义

64,637

社区成员

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

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