如何读取这个C++语法?

Ed *_*ing 6 c++ syntax

我可能是一个完全白痴,但我刚看到这个C++语法,我不能为我的生活弄清楚它在做什么:

(*x)(&a, b, c);
Run Code Online (Sandbox Code Playgroud)

非常感谢快速回答.

Naw*_*waz 20

那么可以有更多的可能性:这一切都取决于所有实体的类型:x,a,b,c.在C++中,您甚至可以重载逗号运算符.

但我只关注x,看看情况如何.但是,如果考虑所有组合,实际答案将会太长.

(*x)(&a, b, c);
Run Code Online (Sandbox Code Playgroud)

x可能是其中之一:

  • 一个函数指针
  • 指向函数对象的指针.
  • 一个迭代器,在解引用时返回函数指针或函数对象.
  • (在底部还有一个部分覆盖了前一个!)

然后你调用它传递三个参数.

以下是一些示例,假设所有其他实体(a,b c)为int:

正如@David在评论中所说:

但是,还有第四种可能性:x可能是某个类的实例,它重载operator*以返回函数指针或函数对象.

这是真的,但我相信这种可能性部分由迭代器覆盖,或者至少迭代器示例给了你足够的提示来自己解决它.:-)

希望有所帮助.

  • 关于指向函数对象的指针的好处.当然,如果`x`有一个类类型,有一个重载的一元`*`,就会出现更多的可能性.更不用说`b`是否具有用户定义的类型,并且有逗号运算符的覆盖.巧妙地使用覆盖,可能性是无穷无尽的. (3认同)

小智 7

看来这x是一个函数指针.如果确实如此,则意味着:

  1. 取消引用x以获得函数类型的表达式;

  2. 用参数调用该函数addressof a,bc.

还要注意*(解除引用)和()运算符x是多余的; 你可以写

x(&a, b, c);
Run Code Online (Sandbox Code Playgroud)

以及if x是一个函数指针.