gpt4 book ai didi

c++ - 为什么通过函数指针调用成员函数时需要 "this"前缀?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:27:52 26 4
gpt4 key购买 nike

据我所知,在 C++ 中,在同一类的函数成员中调用另一个成员函数不需要“this”前缀,因为它是隐式的。但是,在使用函数指针的特定情况下,编译器需要它。仅当我通过 func 指针为调用包含“this”前缀时,以下代码才能正确编译 -

当使用函数指针时,编译器可以推断出它何时指向同一类的成员 func 吗?

class FooBar 
{
private:
int foo;

public:

FooBar()
{
foo = 100;
}

int GetDiff(int bar)
{
return abs(foo - bar);
}

typedef int(FooBar::*MyFuncPtr)(int);

void FooBar::Bar()
{
MyFuncPtr f = &FooBar::GetDiff;
(this->*f)(10);
GetDiff(10);
}

};

最佳答案

这是必需的,因为成员函数指针(与函数指针不同)没有绑定(bind),您可以将它们用于不同的对象。

(this->*f)(10);
(foo.*f)(10);
// etc.

关于c++ - 为什么通过函数指针调用成员函数时需要 "this"前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11212454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com