[英]what does &function_name depicts in the following code
我有以下代碼片段, &main
和&user
在這里描述了什么? 每次運行時,為什么它賦予不同的值? 在什么情況下,傳遞&function_name是有用的?
int user()
{
return 0;
}
int main()
{
int a, b = 0;
a = ((int)&main);
b = ((int)&user);
cout << a <<" " << b;
return 0;
}
它發送您的函數的地址。 每次運行時其不同的原因是,您的程序可能每次都不使用相同的內存空間。
&main為您提供主函數的地址,就像&var為您提供名為var的變量的地址一樣。 強制轉換為int可能有問題。 64位系統上的指針為64位寬,一個int可能不會那么長。
大多數示例都歸結為回調 :您調用函數
f()
傳遞另一個函數g()
的地址,而f()
調用g()
進行某些特定任務。 如果傳遞f()
代替h()
f()
的地址,則f()
將代替回調h()
。基本上,這是一種參數化函數的方法:它的某些行為不是硬編碼為
f()
,而是硬編碼為回調函數。 通過傳遞不同的回調函數,調用者可以使f()
行為不同。 一個經典的qsort()
是C標准庫中的qsort()
,它將其排序標准作為指向比較函數的指針。在C ++中,通常使用函數對象 (也稱為函子)來完成此操作。 這些對象使函數調用運算符過載,因此您可以像調用它們一樣調用它們。 例:
class functor { public: void operator()(int i) {std::cout << "the answer is: " << i << '\\n';} }; functor f; f(42);
其背后的想法是,與函數指針不同,函數對象不僅可以承載算法,還可以承載數據:
class functor { public: functor(const std::string& prompt) : prompt_(prompt) {} void operator()(int i) {std::cout << prompt_ << i << '\\n';} private: std::string prompt_; }; functor f("the answer is: "); f(42);
另一個優點是,內聯調用函數對象有時比通過函數指針進行調用要容易。 這就是為什么在C ++中進行排序有時比在C中進行排序更快的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.