gpt4 book ai didi

c++ - 这个函数指针怎么可能不指向一个函数呢?

转载 作者:太空狗 更新时间:2023-10-29 21:04:11 24 4
gpt4 key购买 nike

为什么指针函数*pFcn没有指向地址?它指向 Add,而不是 &Add。它也不返回地址。这是为什么?

int Add(int nX, int nY)
{
return nX + nY;
}

int main()
{
// Create a function pointer and make it point to the Add function
int (*pFcn)(int, int) = Add;
cout << pFcn(5, 3) << endl; // add 5 + 3

return 0;
}

最佳答案

如果 foo 是一个函数,那么(除了某些特定情况*)foo&foo 都表示指向该函数的指针:函数立即衰减为指向自身的指针,因此 foo(x)(*foo)(x)(**foo)(x) 都是一样的。


如果可以选择,更喜欢通过引用传递函数而不是通过值传递函数:

template <typename R, typename ...Args> R invoke(R (*f)(Args...), Args... args)
{
return f(args...);

// bad: "&f" is not useful
}
invoke_p(add, 1, 2);

template <typename R, typename ...Args> R invoke_r(R (&f)(Args...), Args... args)
{
return f(args...);

// good: "&f" is the expected function pointer
}
invoke_r(add, 1, 2);

*) 例如,sizeof(foo)sizeof(&foo) 是不一样的;前者不合法。

关于c++ - 这个函数指针怎么可能不指向一个函数呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11869923/

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