我可能是一个完全白痴,但我刚看到这个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:
一个假设
int a,b,c; //FIXED as per the assumption
Run Code Online (Sandbox Code Playgroud)功能指针
void f(int *,int, int);
auto *x = f;
(*x)(&a,b,c); //x is function pointer
x(&a,b,c); //works fine, even without (*x)
Run Code Online (Sandbox Code Playgroud)功能对象
struct X { void operator()(int*,int,int); };
X y, *x = &y;
(*x)(&a,b,c); //x is pointer to function object
Run Code Online (Sandbox Code Playgroud)迭代器
std::list<std::function<void(int*,int,int)> l {X(), f};
auto x = l.begin(); //x is an iterator
(*x)(&a,b,c); //(*x) is function object
++x;
(*x)(&a,b,c); //(*x) is function object (still!)
//OR
std::list<void(int*,int,int)> l {f};
auto x = l.begin(); //x is an iterator
(*x)(&a,b,c); //(*x) is function pointer!
Run Code Online (Sandbox Code Playgroud)正如@David在评论中所说:
但是,还有第四种可能性:x可能是某个类的实例,它重载operator*以返回函数指针或函数对象.
这是真的,但我相信这种可能性部分由迭代器覆盖,或者至少迭代器示例给了你足够的提示来自己解决它.:-)
希望有所帮助.
小智 7
看来这x是一个函数指针.如果确实如此,则意味着:
取消引用x以获得函数类型的表达式;
用参数调用该函数addressof a,b和c.
还要注意*(解除引用)和()运算符x是多余的; 你可以写
x(&a, b, c);
Run Code Online (Sandbox Code Playgroud)
以及if x是一个函数指针.
| 归档时间: |
|
| 查看次数: |
391 次 |
| 最近记录: |