当全局函数在局部变量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
}
};
我只是想澄清一下我的知识空白。
给定以下代码:
我原以为会打印“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
}
};