通过 "pass by value" 将一个函数传递给另一个函数
Passing a function to another function via "pass by value"
代码
void printA()
{
cout << "A\n";
}
void print1( void (*func_ptr)(void) )
{
func_ptr();
}
void print2( void func(void))
{
func();
}
int main()
{
//Method 1a (passing function pointer)
print1(&printA);
//Method 1b (why does it work even though I didn't pass a reference or a pointer?)
print1(printA);
//Method 2 (passing the whole function ?)
print2(printA);
return 0;
}
方法 1a 有意义:print1 需要引用或指针。
问题 1:
方法 1b 没有意义:为什么编译器不抛出错误。为什么它可以工作,即使我没有将 printA() 的引用或指针传递给 print1()?
问题 2:
方法 2a 意味着创建函数 printA() 的新副本并将其传递给函数 print2()。
也就是说,函数printA()是按值传递给函数print2()的吗?
问题 3:
函数的标识符是引用吗? (这可能有帮助)
非常感谢。
本函数声明的参数
void print2( void func(void));
被编译器调整为指向
的函数类型的指针
void print2( void ( *func )(void));
以上两个声明都声明了同一个函数,并且可能都出现在同一个编译单元中,尽管编译器会发出一条消息,指出存在冗余函数声明。
另一方面,用作上述函数参数的函数指示符被隐式转换为指向该函数的指针。
你甚至可以这样写
print2(**********printA);
所以你这个问题
Method 2a implies a new copy of the function printA() is made and
passed to function print2(). In other words, is the function printA()
is passed to function print2() by value?
那么函数的两个副本都不会被传递。它是指向传递的函数的指针。
代码
void printA()
{
cout << "A\n";
}
void print1( void (*func_ptr)(void) )
{
func_ptr();
}
void print2( void func(void))
{
func();
}
int main()
{
//Method 1a (passing function pointer)
print1(&printA);
//Method 1b (why does it work even though I didn't pass a reference or a pointer?)
print1(printA);
//Method 2 (passing the whole function ?)
print2(printA);
return 0;
}
方法 1a 有意义:print1 需要引用或指针。
问题 1:
方法 1b 没有意义:为什么编译器不抛出错误。为什么它可以工作,即使我没有将 printA() 的引用或指针传递给 print1()?
问题 2:
方法 2a 意味着创建函数 printA() 的新副本并将其传递给函数 print2()。
也就是说,函数printA()是按值传递给函数print2()的吗?
问题 3:
函数的标识符是引用吗? (这可能有帮助)
非常感谢。
本函数声明的参数
void print2( void func(void));
被编译器调整为指向
的函数类型的指针void print2( void ( *func )(void));
以上两个声明都声明了同一个函数,并且可能都出现在同一个编译单元中,尽管编译器会发出一条消息,指出存在冗余函数声明。
另一方面,用作上述函数参数的函数指示符被隐式转换为指向该函数的指针。
你甚至可以这样写
print2(**********printA);
所以你这个问题
Method 2a implies a new copy of the function printA() is made and passed to function print2(). In other words, is the function printA() is passed to function print2() by value?
那么函数的两个副本都不会被传递。它是指向传递的函数的指针。