91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

21天學通C++(1-1)

發布時間:2020-06-11 18:55:18 來源:網絡 閱讀:2464 作者:nxlhero 欄目:移動開發

函數默認參數

在C++中,可以為參數指定默認值,C語言是不支持默認參數的,Java也不支持!!!

默認參數的語法與使用:
(1)在函數聲明或定義時,直接對參數賦值。這就是默認參數;
(2)在函數調用時,省略部分或全部參數。這時可以用默認參數來代替。

注意事項:

(1)函數默認值只能賦值一次,或者是在聲明中,或者是在定義中,如下所示

  1. /*正確*/  
  2. #include <iostream> 
  3. int f(int a=5);  
  4. int f(int a)  
  5. {  
  6.         std::cout <<a<<std::endl;  
  7.         return a;  
  8. }  
  9. int main()  
  10. {  
  11.         f();  
  12.         return 0;  
  13. }  
  14.  
  15. /*正確*/  
  16. #include <iostream> 
  17. int f(int a=5)  
  18. {  
  19.         std::cout <<a<<std::endl;  
  20.         return a;  
  21. }  
  22. int main()  
  23. {  
  24.         f();  
  25.         return 0;  
  26. }  
  27.  
  28. /*正確*/  
  29. #include <iostream> 
  30. int f(int a);  
  31. int f(int a=5)  
  32. {  
  33.         std::cout <<a<<std::endl;  
  34.         return a;  
  35. }  
  36. int main()  
  37. {  
  38.         f();  
  39.         return 0;  
  40. }  
  41.  
  42.  
  43. /*錯誤*/  
  44. #include <iostream> 
  45. int f(int a=5);  
  46. int f(int a=5)  
  47. {  
  48.         std::cout <<a<<std::endl;  
  49.         return a;  
  50. }  
  51. int main()  
  52. {  
  53.         f();  
  54.         return 0;  
  55. }  
  56.  
  57. [niuxinli@localhost ~]$ make test  
  58. g++     test.cpp   -o test  
  59. test.cpp: In function ‘int f(int)’:  
  60. test.cpp:3: error: default argument given for parameter 1 of ‘int f(int)’  
  61. test.cpp:2: error: after previous specification in ‘int f(int)’  
  62. make: *** [test] Error 1  

(2) 默認參數定義的順序為自右到左。即如果一個參數設定了缺省值時,其右邊的參數都要有缺省值。比如int f(int a, int b=1,int c=2,int d=3)是對的,但是int f(int a,int b=1,int c=2,int d)就是錯的。這個的原因很顯然,你傳幾個參數,編譯器都認為是從左向右的,比如int f(int a,int b=1,int c),傳入了f(1,2),它會認為a=1,b=2,那c呢?所以必須做這個限定。

  1. #include <iostream>  
  2. int f(int a,int b);  
  3. int f(int a=5,int b)  
  4. {  
  5.         std::cout <<a<<std::endl;  
  6.         return a;  
  7. }  
  8. int main()  
  9. {  
  10.         f(6);  
  11.         return 0;  
  12. }  
  13.  
  14. g++     test.cpp   -o test  
  15. test.cpp: In function ‘int f(intint)’:  
  16. test.cpp:3: error: default argument missing for parameter 2 of ‘int f(intint)’  
  17. make: *** [test] Error 1  

(3)默認參數調用時,則遵循參數調用順序,自左到右逐個調用。這一點要與第(2)分清楚,不要混淆。

如:void mal(int a, int b=3, int c=5); //默認參數
mal(3, 8, 9 ); //調用時有指定參數,則不使用默認參數
mal(3, 5); //調用時只指定兩個參數,按從左到右順序調用,相當于mal(3,5,5);
mal(5); //調用時只指定1個參數,按從左到右順序調用v當于mal(5,3,5);
mal( ); //錯誤,因為a沒有默認值
mal(3, , 9) //錯誤,應按從左到右順序逐個調用

(4)默認參數可以是全局變量,全局常量,還可以是函數,但是不能是局部變量,因為局部變量在編譯時未定

  1. [niuxinli@localhost ~]$ cat test.cpp  
  2. #include <iostream>  
  3. int x = 5;  
  4. int f(int a,int b,int c);  
  5. int f(int a,int b=5,int c=x)  
  6. {  
  7.         std::cout <<a+b+c<<std::endl;  
  8.         return a;  
  9. }  
  10. int f2(int (*func)(int,int,int)=f )  
  11. {  
  12.     func(2,3,5);  
  13.     return 0;  
  14. }  
  15. int main()  
  16. {  
  17.         f(1);  
  18.         f2();  
  19.         return 0;  
  20. }  
  21.  
  22. [niuxinli@localhost ~]$ make test && ./test  
  23. g++     test.cpp   -o test  
  24. 11  
  25. 10  

但是注意一點,func不能使用默認參數了,因為func是局部變量,它是后來被賦值成f的

  1. [niuxinli@localhost ~]$ cat test.cpp  
  2. #include <iostream>  
  3. int x = 5;  
  4. int f(int a,int b,int c);  
  5. int f(int a,int b=5,int c=x)  
  6. {  
  7.         std::cout <<a+b+c<<std::endl;  
  8.         return a;  
  9. }  
  10. int f2(int (*func)(int,int,int)=f )  
  11. {  
  12.     func(2);  
  13.     return 0;  
  14. }  
  15. int main()  
  16. {  
  17.         f(1);  
  18.         f2();  
  19.         return 0;  
  20. }  
  21. [niuxinli@localhost ~]$ make test  
  22. g++     test.cpp   -o test  
  23. test.cpp: In function ‘int f2(int (*)(intintint))’:  
  24. test.cpp:11: error: too few arguments to function  
  25. make: *** [test] Error 1  
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

普陀区| 南和县| 朝阳区| 策勒县| 晋州市| 涞水县| 凤凰县| 海淀区| 广丰县| 安福县| 沙坪坝区| 海宁市| 石首市| 富顺县| 遵义县| 水城县| 独山县| 汝南县| 镇雄县| 获嘉县| 淮安市| 玉田县| 山阳县| 龙川县| 本溪| 黄石市| 桑日县| 富阳市| 达孜县| 齐齐哈尔市| 葵青区| 白城市| 铜山县| 江都市| 花莲县| 伊金霍洛旗| 仪陇县| 雷山县| 玛曲县| 保亭| 玉山县|