如果我在c ++中声明函数指针,这意味着什么

use*_*898 2 c++ function-pointers function

当我在我的代码中声明类似的东西时意味着什么:Foo*foo(); 它给我带来了什么好处?如你所见,我不是简单的指针变量.如果我在所有方法的c ++源代码中声明它是什么意思,例如:

// Test cpp class 
.

    #include "Foo.h"
    Foo * foo();

    Test::Test() {}
    Test::GetFooMethods()
    {
        foo()->someMethod();
    }
    …
    …
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 7

Foo * foo();
Run Code Online (Sandbox Code Playgroud)

这不是函数指针.这是一个名为foo不带参数的函数的声明,并返回指向a的指针Foo.

指向此类型函数的指针如下所示:

Foo* (*foo_ptr)() = foo;
Run Code Online (Sandbox Code Playgroud)


Joh*_*ing 7

Foo * foo();是一个名为函数的声明,foo它返回一个指向Foo对象的指针.它不是函数指针.

代码Foo()->someMethod(); 可能是一个错字.你可能意味着foo()->someMethod();.在这种情况下,代码调用foo()如上所述返回指向Foo对象的指针,然后Foo::someMethod()通过该指针调用该方法.

如果事实上你确实意味着Foo()->someMethod();事情变得有点疯狂.这意味着首先Foo在堆栈上默认初始化一个对象.然后Foo::operator->()调用,返回一个具有命名方法的对象someMethod(),并调用该函数.看看为什么我猜这是一个错字?:)

编辑:

为了回答你帖子中的最后一个问题,当你声明一个没有定义它的函数时,你告诉编译器,"我有一个名为foo的函数,它不带参数并返回一个指向Foo的指针,但我不是要告诉你这个功能是如何实现的." 这允许您编写使用该函数的代码,编译器会很高兴.然而,如果你没有某个地方为这个函数提供定义,那么链接器对你来说会非常脾气暴躁.