gpt4 book ai didi

c++ - 我必须在函数指针之前指定 '*' 吗?

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:34 24 4
gpt4 key购买 nike

当我将函数作为参数传递给 c++ 中的其他函数时,是否必须将其指定为

void callOtherFunctions(void f());

void callOtherFunctions(void (*f)());

我不知道引擎盖下发生了什么,所以我尝试使用如下所示的简单程序运行两个版本,替换第二次运行的必要部分。

#include <iostream>
using namespace std;

void printHello();
void callOtherFunctions(void f());

int main() {

callOtherFunctions(printHello);
return 0;
}
void printHello(){
std::cout<<"\n Hello World";
}
void callOtherFunctions(void f()){
for (int i=0;i<5;++i){
f();
}
}

令我惊讶的是,两者都以相同的输出执行且没有警告。那么哪个是首选方式或正确方式(以防我做错了什么)。在每种情况下实际发生了什么,当我传递指针时——它是否在那里执行地址函数,当我传递函数时——它是否在那里复制整个函数?还是别的?

这里是 Ideone Link

最佳答案

void callOtherFunctions(void f());

void callOtherFunctions(void (*f)());

是一样的。引用 N1570,

§6.7.6.3/8 A declaration of a parameter as "function returning type" shall be adjusted to "pointer to function returning type", as in 6.3.2.1.

我更喜欢函数指针语法,因为更多人会熟悉它,而且你的意思很明确。要回答你的第二个问题,在某些情况下也会发生转换(非正式地称为“衰减”):

§6.3.2.1/4 A function designator is an expression that has function type. Except when it is the operand of the sizeof operator, the _Alignofoperator,65) or the unary & operator, a function designator with type "function returning type" is converted to an expression that has type "pointer to function returning type".

关于c++ - 我必须在函数指针之前指定 '*' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28655541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com