簡體   English   中英

函數調用語法通過指針解除引用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM