繁体   English   中英

将 function 作为参数传递的两种方式的区别

[英]Difference between two ways of passing function as parameter

这两种定义 function 接受另一个 function 的方法似乎工作相同(如,两个函数的主体相同)。 我通过摆弄找到了第一个,然后在几个网站上找到了第二个。

void foo(int bar())
void foo(int (*bar)())

示例正文:

{
    for (int i = 0; i < 10; i++)
      cout << bar() << ' ';
}

有什么不同? 一个比另一个更受欢迎吗? 是编译器还是 C++ 版本依赖?

根据function 参数声明规则,它们是相同的。

参数列表中每个function参数的类型根据以下规则确定:
...
3) 如果类型是 function 类型F ,则替换为类型“指向F的指针”
...

对我来说,一个更好的方法是

void foo( int bar( void ) );

因为作为参数的 function 声明看起来更清晰。

类似于写是否

void f( int a[] );

或者

void f( int * );

第一个声明让代码的读者知道 function 接受数组而不是指向单个 object 的指针。

例如

int main( int argc, char * argv[] )

看起来更清晰

int main( int argc, char ** argv )

实际上没有区别,因为编译器隐式地将 function 类型的参数调整为指向 function 类型的指针。

来自 C++ 17 标准(11.3.5 功能)

5 function 的类型由以下规则确定。 每个参数的类型(包括 function 参数包)由其自己的 decl-specifier-seq 和声明符确定。 确定每个参数的类型后,将任何类型为“T 数组”或 function 类型 T 的参数调整为“指向 T 的指针” ....

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM