2010-09-21 117 views
2

我有一个大约在下面的例子中的函数调用问题:C++函数调用问题

int main() 
{ 
    int a, b; 
    cin >> a >> b >> endl; 
    cout << *f(a,b); 
    return 0; 
} 

所以是* F(A,B)有效的函数调用?

编辑::遗憾的错误,我固定的他们,现在我有点累

+4

也许你想展开'f'是什么。 – GManNickG 2010-09-21 06:20:42

回答

6

该代码至少可能是合理的。对于它的工作,f必须被定义为返回以下两种各种各样的事情的函数:要么返回一个指针,在这种情况下*取消引用指针,所以不管它是指向被发送到标准输出。否则,f必须返回一些用户定义的类型,该类型定义operator *以返回与cout兼容的内容。

+0

好的,如果函数返回数字的总和,那么调用无效? – Vlad 2010-09-21 06:29:50

+1

@Vlad:答案取决于*类型*用于保存总和。如果它是'int','long','double'(等等),那么不是,无效。如果是一些UDT定义一个(一元)'操作符*',然后是(尽管后者似乎不大可能)。 – 2010-09-21 06:32:03

+0

好吧这回答我的问题谢谢杰里;) – Vlad 2010-09-21 06:34:34

6

无论f是,*f(a, b)尝试间接运算符适用于f(a, b)结果。

如果f是一个函数指针和你想调用它,而你可以这样做:

(*f)(a, b) 

只是做f(a, b)更简单。

+0

没有f是一个函数不是指向函数... – Vlad 2010-09-21 06:22:48

+2

@Vlad:也许你应该添加到这个问题,所以我们没有尝试了解你的心思,是吗?在这种情况下,它适用于任何'f(a,b)'返回的间接。 (如果它不能做到这一点,是病态的程序。也就是说,'F'需要要么返回一个指针或一个类类型与一元'运算符*'超载。) – GManNickG 2010-09-21 06:25:21

0

我不认为没有看到f的定义有什么办法可以告诉。 C++需要大量的上下文才能知道发生了什么。

+3

更多评论,我想。 – GManNickG 2010-09-21 06:22:41

0

如果不知道'f'是什么,那么判断它是否有效是非常困难的。但是,如果它返回可能为dereferenced的东西,则只要该'dereferenced'值可以打印,(an overloaded operator <<)就应该存在于该类型中。