首页 > 后端开发 > C++ > 正文

什么是 C 的'最令人烦恼的解析”以及它如何误导函数声明?

Barbara Streisand
发布: 2024-11-24 13:22:12
原创
482 人浏览过

What's C  's

C 最令人烦恼的解析

在 C 中,解析代码片段的方式可能会导致意外的行为。一个臭名昭著的例子被称为“最令人烦恼的解析”。

函数声明之谜

考虑以下代码:

widget w(gadget(), doodad());
登录后复制

乍一看,它似乎声明了一个名为 w 的 widget 类型的变量。然而,这段代码实际上定义了一个名为 w 的函数,它接受两个参数。

参数衰减和指针转换

在函数声明中,数组类型的参数衰减为指针到第一个元素,函数类型的参数衰减为函数指针。因此,w 的等效声明是:

widget w(gadget(*)(), doodad(*)());
登录后复制

这意味着函数 w 将一个指向不带参数并返回小工具的函数的指针作为其第一个参数。它还需要第二个参数,一个指向不带参数并返回小玩意的函数的指针。该函数本身返回一个小部件。

额外的复杂性

“最令人烦恼的解析”在以下情况下变得更加混乱:

widget w(gadget(x));
登录后复制

如果 x 已经是一个变量,如何将其解释为函数声明?答案在于,在 C 中,声明变量时可以使用额外的括号。因此,小工具 x;和小工具(x);两者都声明了名为 x 的相同变量。因此,上面的代码是一个函数的声明,该函数采用名为 x 的 gadget 类型的第一个参数,并返回一个小部件。

以上是什么是 C 的'最令人烦恼的解析”以及它如何误导函数声明?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板