当全局函数在局部变量c ++的范围内调用时,全局变量优先于局部变量

Global variable priority over local variable when global function called in scope of local variable c++

我只是想澄清一下我的知识空白。

给定以下代码:

我原以为会打印“Hi”,这纯粹是基于在 foo 的范围内,FuncA 的定义被覆盖,因此应该被调用。这不会发生,如图所示 https://onlinegdb.com/LzPbpFN3R

有人可以解释一下这里发生了什么吗?

std::function<void()> FuncA;

void FuncB() {
    if (FuncA) {
        FuncA();
    }
}

struct Foo {
    void FuncA() {
        std::cout << "Hi";
    }
    
    void FuncC() {
        FuncB();
    }
};

int main()
{
    Foo foo{};
    
    foo.FuncC();
    
    return 0;
}

一旦调用自由函数,您就不再处于 class 中。而且您丢失了特殊的 this 指针。一个(相当 C-ish)的方式可能是:

void FuncB(struct Foo* a) {   // expect a pointer to a Foo object
    a->FuncA();               // call the method on the passed object
}

struct Foo {
    void FuncA() {
        std::cout << "Hi";
    }
    
    void FuncC() {
        FuncB(this);         // pass the special this pointer to the function
    }
};