如此定义类型 int ival(int());?

loxiro 2008-08-29 08:48:00
今天在看C++primer的时候发现这样一个定义 int ival(int());这句什么意思?
...全文
138 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
BORLANDSUN 2008-10-10
  • 打赏
  • 举报
回复
为什么要写出这样的代码呢?晦涩的代码不会使机器弄糊涂,它只会使你和看你的代码的人糊涂。
勉励前行 2008-09-01
  • 打赏
  • 举报
回复
int ival(int());
這裡有二義性,不同的編譯器可能解析為不同的結果。

vc6 解析為 int ival(int()) == int ival(0) ; //定義變量 ival , 用 0 初始化.
vc7 解析為 int ival(int()) == int ival(int (*)()) ;
看C++標准的話:出現歧義時,優先解析為類型。int()在這裡就應該解析為 int(*)()
bcb 的解析是符合標准的。

但寫代碼應該要規范些,而不應該寫這樣的有爭議的代碼。

改成: int ival(int (*)()) ; //這樣寫就沒有爭議。
int ival( (int()) ) ; //加個括號就可以沒有爭議。


loxiro 2008-08-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 Behard 的回复:]
其实很多疑问都是自己写代码试一试就知道的了
[/Quote]
你一试就知道,请问怎么怎么试,灌水的不要
勉励前行 2008-08-30
  • 打赏
  • 举报
回复
我去C++版問一下
勉励前行 2008-08-30
  • 打赏
  • 举报
回复
我也不明白為什麼:
int ival();
int (*ival)();
//這兩個是同樣的意思,不同的寫法。
int a = int(); //這裡int()為0,
如果在模板中:

我真有些混了。建議用其他編譯器試試看, int V() ; int (*V)() ; 這兩個是不是一樣的吧。
Behard 2008-08-30
  • 打赏
  • 举报
回复
其实很多疑问都是自己写代码试一试就知道的了
柯本 2008-08-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 akirya 的回复:]
ival是一个函数 参数是 函数指针.
[/Quote]
这样写就可以看明白了:
int ival(int test())
{
}

调用EX:
int test()
{
}

int ival(int())
{
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ival(test);
}
  • 打赏
  • 举报
回复
ival是一个函数 参数是 函数指针.

用这个代码输出一下类型就知道是啥了
#include<iostream>
using namespace std;
int main(int argc, char *argv[])
{
int ival(int());
cout<<typeid(ival).name()<<endl;
return 0;
}

13,872

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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