国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Bjarne:什么是函數對象?

2019-11-17 05:13:06
字體:
來源:轉載
供稿:網友

  顧名思義,就是在某種方式上表現得象一個函數的對象。典型地,它是指一個類的實例,這個類定義了應用操作符Operator()。

  函數對象是比函數更加通用的概念,因為函數對象可以定義跨越多次調用的可持久的部分(類似靜態局部變量),同時又能夠從對象的外面進行初始化和檢查(和靜態局部變量不同)。例如:

class Sum {
 int val;
 public:
  Sum(int i) :val(i) { }
  operator int() const { return val; } // 取得值
  int operator()(int i) { return val+=i; } // 應用
};

void f(vector v)
{
 Sum s = 0; // initial value 0
 s = for_each(v.begin(), v.end(), s); // 求所有元素的和
 cout << "the sum is " << s << "/n";

 //或者甚至:
 cout << "the sum is " << for_each(v.begin(), v.end(), Sum(0)) << "/n";
}

  注重一個擁有應用操作符的函數對象可以被完美地內聯化(inline),因為它沒有涉及到任何指針,后者可能導致拒絕優化。與之形成對比的是,現有的優化器幾乎不能(或者完全不能?)將一個通過函數指針的調用內聯化。

  在標準庫中,函數對象被廣泛地使用以獲得彈性。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兰州市| 宕昌县| 分宜县| 泗洪县| 正定县| 富宁县| 内丘县| 东台市| 孝昌县| 枞阳县| 安陆市| 扎兰屯市| 淮安市| 贵南县| 合水县| 绵阳市| 铁力市| 鹿邑县| 土默特左旗| 上思县| 贵阳市| 定远县| 鸡西市| 吴忠市| 桃源县| 固原市| 汉阴县| 和静县| 山阳县| 合肥市| 潼南县| 大余县| 泰和县| 鹤峰县| 阳泉市| 金乡县| 靖州| 沅陵县| 垫江县| 康马县| 淳安县|