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特性,但事情还没有发展到那个程度!