[英]What is the difference between different ways of passing a function as an argument to another 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.