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)
Foo * foo();
Run Code Online (Sandbox Code Playgroud)
这不是函数指针.这是一个名为foo不带参数的函数的声明,并返回指向a的指针Foo.
指向此类型函数的指针如下所示:
Foo* (*foo_ptr)() = foo;
Run Code Online (Sandbox Code Playgroud)
Foo * foo();是一个名为函数的声明,foo它返回一个指向Foo对象的指针.它不是函数指针.
代码Foo()->someMethod(); 可能是一个错字.你可能意味着foo()->someMethod();.在这种情况下,代码调用foo()如上所述返回指向Foo对象的指针,然后Foo::someMethod()通过该指针调用该方法.
如果事实上你确实意味着Foo()->someMethod();事情变得有点疯狂.这意味着首先Foo在堆栈上默认初始化一个对象.然后Foo::operator->()调用,返回一个具有命名方法的对象someMethod(),并调用该函数.看看为什么我猜这是一个错字?:)
编辑:
为了回答你帖子中的最后一个问题,当你声明一个没有定义它的函数时,你告诉编译器,"我有一个名为foo的函数,它不带参数并返回一个指向Foo的指针,但我不是要告诉你这个功能是如何实现的." 这允许您编写使用该函数的代码,编译器会很高兴.然而,如果你没有某个地方为这个函数提供定义,那么链接器对你来说会非常脾气暴躁.
| 归档时间: |
|
| 查看次数: |
286 次 |
| 最近记录: |