C++ 函数间赋值
请解释为什么下面的代码不起作用C++ 函数间赋值,c++,function,C++,Function,请解释为什么下面的代码不起作用 #include <stdio.h> int foo() { return 1; } int bar() { return 2; } void ass() { foo=bar; } int main() { ass() } 原因。必须使用函数指针。您不能为函数本身赋值 int(*baz)() = &foo; baz(); 必须使用函数指针。您不能为函数本身赋值 int(*baz)() = &foo; baz()
#include <stdio.h>
int foo() { return 1; }
int bar() { return 2; }
void ass()
{
foo=bar;
}
int main()
{
ass()
}
原因。必须使用函数指针。您不能为函数本身赋值
int(*baz)() = &foo;
baz();
必须使用函数指针。您不能为函数本身赋值
int(*baz)() = &foo;
baz();
您不能将
函数
分配给函数
,因为您不能将int
分配给int
。自然地思考,您将一个int变量分配给另一个int变量,这意味着您将第二个变量的右值分配给第一个变量的左值(地址)。对于函数,可以将一个函数对象分配给另一个函数对象。区别在于,函数是代码,不是数据,但它有一个地址(起点)。因此,相互分配函数通常意味着将函数的地址分配给可以保存地址的变量,即函数指针
void f(){}
typedef void(*pF)(); //typedef for easy use
pf foo; //create a function pointer object
foo = &f; //assign it the address of the function
您不能将
函数
分配给函数
,因为您不能将int
分配给int
。自然地思考,您将一个int变量分配给另一个int变量,这意味着您将第二个变量的右值分配给第一个变量的左值(地址)。对于函数,可以将一个函数对象分配给另一个函数对象。区别在于,函数是代码,不是数据,但它有一个地址(起点)。因此,相互分配函数通常意味着将函数的地址分配给可以保存地址的变量,即函数指针
void f(){}
typedef void(*pF)(); //typedef for easy use
pf foo; //create a function pointer object
foo = &f; //assign it the address of the function
试试这个:
typedef int (*int_funcptr_void)(void);
然后,您可以简单地:
int foo() { return 1; }
int bar() { return 2; }
int_funcptr_void func;
void ass()
{
func = (int_funcptr_void)foo;
}
int main()
{
ass(); //you also forgot a semicolon here, but nice naming
//then, we can call it:
printf("%d\n", func());
}
得到这个:
hydrogen:tmp phyrrus9$ ./a.out
1
希望能有所帮助。试试这个:
typedef int (*int_funcptr_void)(void);
然后,您可以简单地:
int foo() { return 1; }
int bar() { return 2; }
int_funcptr_void func;
void ass()
{
func = (int_funcptr_void)foo;
}
int main()
{
ass(); //you also forgot a semicolon here, but nice naming
//then, we can call it:
printf("%d\n", func());
}
得到这个:
hydrogen:tmp phyrrus9$ ./a.out
1
希望这会有帮助。为什么你认为它应该起作用?它不起作用,因为它毫无意义。你能解释一下你想要做什么吗?正如错误所说,您试图分配给一个函数,这是不允许的。赋值只适用于对象(数据)类型。你怎么能指望这样的东西会起作用?@MikeSeymour我已经更新了我的帖子。我正试图让名称
foo
表示另一个函数。该语言在C++11中获得了一些准FP特性,但事情还没有发展到那个程度!为什么你认为它应该起作用?它不起作用,因为它毫无意义。你能解释一下你想要做什么吗?正如错误所说,您试图分配给一个函数,这是不允许的。赋值只适用于对象(数据)类型。你怎么能指望这样的东西会起作用?@MikeSeymour我已经更新了我的帖子。我正试图让名称foo
表示另一个函数。该语言在C++11中获得了一些准FP特性,但事情还没有发展到那个程度!