<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] # 簡介 實現函數重載的條件: * 同一個作用域 * 參數個數不同 * 參數類型不同 * 參數順序不同 # 基本語法 ~~~ //1. 函數重載條件 namespace A{ void MyFunc(){ cout << "無參數!" << endl; } void MyFunc(int a){ cout << "a: " << a << endl; } void MyFunc(string b){ cout << "b: " << b << endl; } void MyFunc(int a, string b){ cout << "a: " << a << " b:" << b << endl;} void MyFunc(string b, int a){cout << "a: " << a << " b:" << b << endl;} } //2.返回值不作為函數重載依據 namespace B{ void MyFunc(string b, int a){} //int MyFunc(string b, int a){} //無法重載僅按返回值區分的函數 } ~~~ 注意: 函數重載和默認參數一起使用,需要額外注意二義性問題的產生。 ~~~ void MyFunc(string b){ cout << "b: " << b << endl; } //函數重載碰上默認參數 void MyFunc(string b, int a = 10){ cout << "a: " << a << " b:" << b << endl; } int main(){ MyFunc("hello"); //這時,兩個函數都能匹配調用,產生二義性 return 0; } ~~~ # 引用重載 ~~~ //引用的重載版本,需要引用合法內存空間 int func(const int &a) { } ~~~ # 為什么函數返回值不作為重載條件呢? 當編譯器能從上下文中確定唯一的函數的時,如int ret = func(),這個當然是沒有問題的。然而,我們在編寫程序過程中可以忽略他的返回值。那么這個時候,一個函數為`void func(int x);`另一個為int func(int x); 當我們直接調用func(10),這個時候編譯器就不確定調用那個函數。所以在c++中禁止使用返回值作為重載的條件。 # 實現原理 編譯器為了實現函數重載,也是默認為我們做了一些幕后的工作,編譯器用不同的參數類型來修飾不同的函數名,比如`void func();` 編譯器可能會將函數名修飾成`_func`,當編譯器碰到void func(int x),編譯器可能將函數名修飾為`_func_int`,當編譯器碰到void func(int x,char c),編譯器可能會將函數名修飾為`_func_int_char`我這里使用”可能”這個字眼是因為編譯器如何修飾重載的函數名稱并沒有一個統一的標準,所以不同的編譯器可能會產生不同的內部名。 ~~~ void func(){} void func(int x){} void func(int x,char y){} ~~~ 以上三個函數在linux下生成的編譯之后的函數名為: ~~~ _Z4funcv //v 代表void,無參數 _Z4funci //i 代表參數為int類型 _Z4funcic //i 代表第一個參數為int類型,第二個參數為char類型 ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看