[英]Calling a function through a function pointer - dereference the pointer or not? What's the difference?
[英]Function call syntax through a pointer dereference
考慮一下代碼
int add(int a, int b)
{
return a + b;
}
int main()
{
std::cout << (*add)(3, 2);
}
取消引用函數指針有什么意義?
我想不出這樣的用例,它會帶來優勢......
為什么這個函數調用語法存在於C ++中?
我無法確定我是否正確,但這里有一個可能的解釋:c和c ++中的每個函數都是一個潛在的變量。 可能的功能聲明是:
int (*MyFunction)(int, double);
在這種情況下 - 變量名稱: MyFunction
| 類型:使用int, double
參數返回int
函數。
因此,即使在聲明函數時,實際上也是使用“函數”類型聲明變量。 在這種情況下,為什么你可以在你的情況下(*add)(3, 2)
使用函數調用(或使用變量)是有道理的。
您可以更清楚地了解lambda表達式,它可以實現函數實現,然后讓您像本地函數變量一樣使用它:
int(*MyFunction)(int, double) = [](int a, double b) -> int {
return (int)((a + b) * 10);
};
這里我們聲明函數類型變量,並使用lambda表達式為它實現一個函數。 現在我們可以用兩種形式使用它:
MyFunction(1, 2.5); // Like a regular function
(*MyFunction)(1, 2.5); // As a function type variable
同樣,這是我能想到的最有意義的解釋。 我不確定它是否是正確/最好/完全解釋,但我希望它給你一個新的功能視角。
存在這種語法是因為C有它,而C ++語法最初是基於C.
f(args)
和(*f)(args)
的代碼行為沒有區別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.