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中文网其他相关文章!