歡迎使用我的 在線工具

          小D

          讀歷史、看小說、寫程序都是我所愛。技術不好,頭腦不靈光,靠的是興趣。
          隨筆 - 35, 文章 - 25, 評論 - 13, 引用 - 0

          導航

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          公告


          常用鏈接

          留言簿(2)

          隨筆分類(34)

          隨筆檔案(35)

          文章分類(27)

          文章檔案(25)

          偶像啊

          技術網站

          搜索

          •  

          積分與排名

          • 積分 - 58964
          • 排名 - 885

          最新評論

          閱讀排行榜

          評論排行榜

          關于函數

          #include<iostream>
          #include "string"
          using namespace std;
          /*
          size_t count_calls()
          {
          ?static size_t ctr = 0;
          ?return ++ctr;
          }
          */
          //不可以間隔省,不可以向后省,具體自己以編譯器的角度理解
          /*
          string screenInit(string::size_type height = 24,
          ????? string::size_type width = 80,
          ????? char background = ' ')
          {
          ?return "";
          }
          */

          bool lengthCompare(const string &str1, const string &str2)//聲明一個函數
          {
          ?if(str1.length() >= str2.length())
          ??return true;
          ?else
          ??return false;
          }

          void useBigger(const string &, const string &,
          ????? bool(const string &, const string &));//將函數指針作為參數
          void useBigger(const string &, const string &,
          ????? bool (*)(const string &, const string &));//也可以這樣傳遞函數指針。

          int (*ff(int))(int *, int);//返回指向函數的指針,需要從里往外理解
          //很難理解大致為 有一個ff(int)函數,他帶有(int *, int)的參數,返回一個int
          //可使用typedef簡化為
          typedef int (*FF)(int *, int)
          FF ff(int)
          //真雞巴復雜


          int main()
          {
          /*?
          ?typedef bool (*cmpFcn)(const string &, const string &); //只要函數類型相同皆可
          ?//所謂的函數類型,是指函數參數及其類型、個數、順序等,還有返回值
          ?cmpFcn pf1 = 0;
          ?cmpFcn pf2 = lengthCompare;
          ?pf2("111","2222");//直接引用函數名等效于在函數名上應用取地址操作符
          ?pf1 = pf2;
          ?pf1("2222","111");//不需要使用解引用操作符*,直接通過指針調用函數。
          */?
          /*
          ?for(size_t i = 0;i != 100; ++i)
          ??cout<<count_calls()<<endl;
          ?return 0;
          */

          ?

          return 0;
          }

          ?

          最后加幾點注意:

          1.? 千萬不要返回局部對象的引用,因為局部對象已被回收,所以引用將會變成空引用,而返回對象執行的是值拷貝,也就是重新生成了一個對象。

          2. 如果不希望引用返回的值被修改,返回引用請聲明為const,同理形參也是一樣,如果不希望被修改請設為const。

          3. 千萬不要返回局部對象的引用,基本和引用相同,方法返回后局部對象被釋放,所以指針為垂懸指針。

          4. 默認實參是通過給形參表中提供明確的初始值來指定的。在函數聲明中指定,而且在同一個文件中只能為一個函數指定一次。

          posted on 2009-11-04 19:19 vagasnail 閱讀(284) 評論(0)  編輯  收藏 所屬分類: C\C++

          主站蜘蛛池模板: 罗城| 尼玛县| 兴宁市| 会理县| 会东县| 巨野县| 阜新市| 嘉禾县| 喀什市| 喀喇沁旗| 六盘水市| 安多县| 金沙县| 汉阴县| 威远县| 武宣县| 临沧市| 开封县| 根河市| 朝阳区| 罗平县| 邵阳县| 四平市| 天等县| 汾阳市| 布拖县| 乌兰察布市| 沙田区| 平邑县| 同江市| 沐川县| 伽师县| 无为县| 兴宁市| 深州市| 繁峙县| 突泉县| 穆棱市| 平阴县| 临湘市| 南溪县|