首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在标准的6.8节中,这个例子是如何工作的?

在标准的6.8节中,这个例子是如何工作的?
EN

Stack Overflow用户
提问于 2014-08-11 13:16:48
回答 3查看 105关注 0票数 3

在“标准”(N3690草案)第6.8节中,我看到了这段奇怪的代码:

代码语言:javascript
复制
struct T2 { T2(int){ } };
int a, (*(*b)(T2))(int), c, d;

int(*(*b)(T2))(int)是什么?!

b是指向T2构造函数的指针吗?!还是指向函数指针的指针?

很奇怪,下面的代码也编译得很好!:

代码语言:javascript
复制
struct T2 { T2(int){ } };
int((*b)(T2));
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-11 13:25:14

代码语言:javascript
复制
int (*(*b)(T2))(int) 

它将b声明为指向以下函数的指针:

  • T2为参数
  • 并返回指向以下函数的指针:
    • int作为参数
    • 并返回一个int

应该将这个声明简化为:

代码语言:javascript
复制
typedef int (*return_type) (int);
typedef return_type(*function_type) (T2);

或者更好地使用C++11样式类型别名:

代码语言:javascript
复制
using return_type   = int(*)(int);
using function_type = return_type(*)(T2);

然后声明变成如下:

代码语言:javascript
复制
function_type b; //so simple!

希望这能有所帮助。

票数 9
EN

Stack Overflow用户

发布于 2014-08-11 13:24:40

它是变量b的声明。b是一个指向函数的指针,具有T2类型的一个参数。此函数的返回类型是指向带有一个参数int返回int的函数的指针。

票数 1
EN

Stack Overflow用户

发布于 2014-08-11 13:37:14

这应该能帮助你理解这里发生的事情:

代码语言:javascript
复制
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构造函数--“构造函数的地址不应使用”)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25244209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档