为什么我要调用一个函数名用括号括起来的函数
why would I call a function with the function name wrapped in parens?
我最近遇到了这样的代码:
void function(int a, int b, int c){
//...
}
int main(){
//...
(function)(1,2,3);
//...
}
将函数名单独包装在parens中有什么意义
它是否具有与function(1,2,3);
不同的影响?
为什么语言允许这样的语法?
我能想到的唯一重要的情况是当function
被定义为宏时。
在C中,标准库函数也可以实现为类似函数的宏(为了提高效率)。将函数名称括在括号中会调用实际函数(因为函数名称后面没有(
)。
至于为什么语言允许语法,函数调用由指向函数类型的指针表达式和括号中的参数组成。在大多数情况下,前缀是函数名(隐式转换为指向函数的指针),但它可以是任意表达式任何表达式都可以用括号括起来,通常而不改变其含义(影响优先级除外)。(但请参阅Jonathan Leffler的评论以了解一些反例。)
除了抑制类似函数的宏展开外,将不合格的函数名括在括号中还可以抑制与参数相关的查找。例如:
namespace meow {
struct kitty {};
void purr(kitty) {}
}
int main() {
meow::kitty stl;
purr(stl); // OK, ADL finds meow::purr
(purr)(stl); // error; no ADL is performed
}
相关文章:
- "error: no matching function for call to"构造函数错误
- 如何使用connect将qml按钮与同一类的cpp函数连接起来
- 大括号括起来的初始值设定项列表中的短 c++ 类构造函数
- Lua 中看起来像表的函数是什么?
- 不能在构造函数 - C++中使用大括号括起来的列表
- C++委托构造函数中用大括号括起来的初始值设定项列表
- 如果我有一个向量(或类似的东西)成员变量,那么move构造函数看起来怎么样
- 如何将函数的整数大小与数组的实际大小链接起来?C++
- C++成员函数未声明错误时(当它看起来是错误时)
- 为什么我要调用一个函数名用括号括起来的函数
- 'xxxx' :看起来像一个函数定义,但没有参数列表;跳过表观身体
- 用于检查向量中任何数字组合是否加起来为 int 的函数
- 如何将更改后的行与C代码的git存储库中的函数关联起来
- 在C++中,是否有一种将元数据与函数关联起来的整洁方法
- 如何将Qt动作与函数连接起来
- 我有一个C++2d数组,我必须调用函数.它只对每5个位置进行平均,例如[0][0]+[5][0]这看起来是否正确,或者有
- 钩子内部函数:参数看起来是什么样的?
- 如何从一个线程发出信号,并将信号与一个单独的函数连接起来
- 是否有可能将统一初始化和构造函数结合起来?
- table':看起来像一个函数定义,但没有参数列表.——同时试图创造财产