在“标准”(N3690草案)第6.8节中,我看到了这段奇怪的代码:
struct T2 { T2(int){ } };
int a, (*(*b)(T2))(int), c, d;int(*(*b)(T2))(int)是什么?!
b是指向T2构造函数的指针吗?!还是指向函数指针的指针?
很奇怪,下面的代码也编译得很好!:
struct T2 { T2(int){ } };
int((*b)(T2));发布于 2014-08-11 13:25:14
int (*(*b)(T2))(int) 它将b声明为指向以下函数的指针:
T2为参数int作为参数int。
应该将这个声明简化为:
typedef int (*return_type) (int);
typedef return_type(*function_type) (T2);或者更好地使用C++11样式类型别名:
using return_type = int(*)(int);
using function_type = return_type(*)(T2);然后声明变成如下:
function_type b; //so simple!希望这能有所帮助。
发布于 2014-08-11 13:24:40
它是变量b的声明。b是一个指向函数的指针,具有T2类型的一个参数。此函数的返回类型是指向带有一个参数int返回int的函数的指针。
发布于 2014-08-11 13:37:14
这应该能帮助你理解这里发生的事情:
struct T2 { T2(int){ } };
typedef int (*func)(int);
int
(*foo(T2))(int) {
}
func
bar(T2) {
}
int main() {
int (*(*b)(T2))(int);
b = &foo;
b = &bar;
return 0;
}因此,这是一个函数,它接受一个T2,并返回一个函数指针,指向返回一个int和一个int作为参数的函数。
我将此添加到我的示例中,说明为什么c(++)是一种可怕的语言。
顺便说一句,您不能使用构造函数的地址(C++98标准12.1/12构造函数-- "12.1-12构造函数--“构造函数的地址不应使用”)。
https://stackoverflow.com/questions/25244209
复制相似问题