彿°
彿°ï¼functionï¼æ¯æä¸ä¸ªè¯å¥åºåï¼å½æ°ä½, function bodyï¼å ³èå°ä¸ä¸ªåååé¶ææ´å¤ä¸ªå½æ°å½¢åï¼function parameterï¼çå表ç C++ å®ä½ã
// 彿°åï¼âisoddâ // å½¢ååè¡¨æ¥æä¸ä¸ªå½¢åï¼å ·æåå ânâ åç±»å int // è¿åç±»åæ¯ bool bool isodd(int n) { // 彿°ä½å¼å§ return n % 2; } // 彿°ä½ç»æ
è°ç¨å½æ°æ¶ï¼ä¾å¦å¨å½æ°è°ç¨è¡¨è¾¾å¼ä¸ï¼ä»¥å个å®åï¼argumentï¼ï¼å¯ç±è°ç¨åºææä¾ï¼æè é»è®¤ï¼æ¥åå§åå个形åï¼ç¶åæ§è¡å½æ°ä½ä¸çè¯å¥ã妿ä¸ä¸ªå½æ°çå½¢åå表以 ... ç»å°¾ï¼é£ä¹é¢å¤çå®åå¯ä»¥æä¾ç»è¯¥å½æ°ï¼è¿æ ·ç彿°è¢«ç§°ä¸ºåå彿°ã
int main() { for(int arg : {-3, -2, -1, 0, 1, 2, 3}) std::cout << isodd(arg) << ' '; // isodd 被è°ç¨ 7 æ¬¡ï¼ // æ¯æ¬¡ä» arg å¤å¶åå§å n }
彿°è°ç¨è¡¨è¾¾å¼ä¸æ éå®ç彿°åä¼ä»¥ä¸ç»é¢å¤çè§åæ¥æ¾ï¼å®è¢«ç§°ä¸ºâå®åä¾èµæ¥æ¾âï¼argument-dependent lookup/ADLï¼ã
彿°å¯ä»¥éè¿è¿åæè æåºå¼å¸¸ç»æ¢ã
彿°å¯ä»¥æ¯åç¨ãåç¨å¯ä»¥æåæ§è¡ï¼ä»¥å¨ä¹åæ¢å¤æ§è¡ã |
(C++20 èµ·) |
彿°å£°æå¯ä»¥å¨ä»»ä½ä½ç¨åä¸åºç°ï¼ä½å½æ°å®ä¹åªè½å¨å½å空é´ä½ç¨ååºç°ï¼æå¯¹äºæåååå 彿°ï¼å¯ä»¥å¨ç±»ä½ç¨åä¸åºç°ãå¨ç±»ä½ä¸å£°æèä¸å¸¦ friend 说æç¬¦ç彿°æ¯ç±»æå彿°ãè¿ç§å½æ°æ¥æè®¸å¤éå æ§è´¨ï¼ç»èè§æå彿°ã
彿°ä¸æ¯å¯¹è±¡ï¼ä¸åå¨å½æ°çæ°ç»ï¼èä¸å½æ°ä¸è½æå¼ä¼ éæè¢«å ¶ä»å½æ°æè¿åãå¯ä»¥ææå/å°å½æ°ï¼é¤äºä¸»å½æ°å大夿°æ ååºå½æ° (C++20 èµ·)以å¤ï¼çæéåå¼ç¨ï¼å®ä»¬å¯ä»¥ç¨äºè¿äºå½æ°èªèº«æ æ³è¢«ä½¿ç¨çå°æ¹ãå æ¤æä»¬è¯´è¿äºå½æ°âå¯ååâã
æ¯ä¸ªå½æ°é½å
·æä¸ä¸ªç±»åï¼å®ç±å½æ°çè¿åç±»åï¼ææå½¢åçç±»åï¼è¿è¡æ°ç»å°æéå彿°å°æé转æ¢åï¼è§å½¢åå表ï¼ï¼å½æ°æ¯å¦ä¸º noexcept
(C++17 èµ·)ï¼ä»¥å对äºééææå彿°ç cv é宿§åå¼ç¨é宿§ (C++11 èµ·)ææã彿°ç±»ååæ ·æ¥æè¯è¨é¾æ¥ãä¸å卿 cv éå®ç彿°ç±»åï¼ä¸è¦ä¸å¦ int f() const; è¿æ ·ç cv éå®å½æ°ç±»åï¼æå¦ std::string const f(); è¿æ ·çè¿å cv éå®ç±»åç彿°ç¸æ··æ·ï¼ã妿æä»»ä½ cv éå®ç¬¦è¢«æ·»å å°å°å½æ°ç±»åçå«åï¼é£ä¹å®ä¼è¢«å¿½ç¥ã
å¯ä»¥ç¨ lambda 表达å¼äº§çæ å彿°ã |
(C++11 èµ·) |
åä¸ä½ç¨åä¸ï¼å¯ä»¥æå¤ä¸ªå½æ°æ¥æç¸åçåç§°ï¼åªè¦å ¶å½¢åå表ï¼ä»¥å对äºééææå彿°ç cv æå¼ç¨ (C++11 èµ·)éå®ä¸åå³å¯ãè¿è¢«ç§°ä½å½æ°éè½½ãåªæè¿åç±»åå noexcept 说æ (C++17 èµ·)ä¸åç彿°å£°æä¹é´æ æ³éè½½ãéè½½å½æ°çå°åæä¸é¨çç¡®å®æ¹æ³ã
[ç¼è¾] 彿°å¯¹è±¡
é¤äºå½æ°å·¦å¼ï¼å½æ°è°ç¨è¡¨è¾¾å¼è¿æ¯æå½æ°æé以åéè½½äºå½æ°è°ç¨è¿ç®ç¬¦åå¯è½¬æ¢ä¸ºå½æ°æéçä»»ä½ç±»ç±»åçå¼ï¼å æ¬ lambda 表达å¼ï¼ (C++11 èµ·)ãè¿äºç±»å被ç»ç§°ä¸ºå½æ°å¯¹è±¡ (FunctionObject) ï¼èä¸å¨ C++ æ ååºä¸çåå¤é½æä½¿ç¨ï¼ç¤ºä¾å¯è§äºå è°è¯ (BinaryPredicate) åæ¯è¾ (Compare) çç¨æ³ã
æ ååºä¹æä¾æ°ä¸ªé¢å®ä¹ç彿°å¯¹è±¡æ¨¡æ¿ï¼ä»¥åä¸äºç»ææ°å½æ°å¯¹è±¡çæ¹æ³ï¼å æ¬ std::lessãstd::mem_fnãstd::bindãstd::function (C++11 èµ·)åstd::bind_front (C++20 èµ·)ï¼ã