首页  >  文章  >  后端开发  >  `widget w(gadget(), doodad());` 是 C 中的变量声明吗?

`widget w(gadget(), doodad());` 是 C 中的变量声明吗?

Linda Hamilton
Linda Hamilton原创
2024-11-19 07:53:02861浏览

Is `widget w(gadget(), doodad());` a Variable Declaration in C  ?

C 最令人烦恼的解析已解决

问题出现在如下代码中:

widget w(gadget(), doodad());  // Pitfall: Not a Variable Declaration

一个可能会假设此代码正在声明一个名为 w 且类型为 widget 的变量。然而,事实并非如此。

在 C 中,数组类型的参数衰减为指向第一个元素的指针,函数类型的参数衰减为函数指针。这意味着所声明的函数的签名为:

widget w(gadget(*)(), doodad(*)());

该函数有两个参数:一个是指向不带参数并返回小工具的函数的指针,另一个是指向函数的指针不接受任何争论并返回一个小玩意。函数本身返回一个小部件。

当向函数参数添加额外的括号时,会出现更令人困惑的情况,如:

widget w(gadget(x));

这看起来应该声明一个名为 x 的变量类型 gadget,但它实际上声明了一个函数,该函数采用第一个名为 x 的 gadget 类型参数并返回一个小部件。

以上是`widget w(gadget(), doodad());` 是 C 中的变量声明吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn