<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ##實戰c++中的string系列--函數返回局部變量string(引用局部string,局部string的.c_str()函數) 當函數返回字符串的時候,我們可以定義返回string和string&。 1寫一個返回string引用的函數 ~~~ std::string & TestStringReference() { std::string loal_str = "holy shit"; return loal_str; } ~~~ 這個函數當然是錯誤的,編譯器會提示我們: 返回局部變量或臨時變量的地址: loal_str 即不能返回局部變量的引用。 2寫一個返回string的函數(函數返回局部變量string的時候能不能被引用?) ~~~ std::string TestStringReference() { std::string strTest = "This is a test."; return strTest; } ~~~ 那么對于上述函數的返回值可以被引用嗎? 代碼說話: ~~~ #include<iostream> #include<string> std::string TestStringReference() { std::string strTest = "This is a test."; return strTest; } int main() { std::string& strRefer = TestStringReference(); std::cout << "strRefer:" << strRefer << std::endl; return 0; } ~~~ 代碼 完美運行。 實際上返回的不是局部變量,而是編譯器新構造的臨時對象。 3返回string的函數直接調用.c_str() 上面說了,返回的“局部”string可以被引用的,那么返回的“局部”string直接調用.c_str()會有什么效果恩? ~~~ #include<iostream> #include<string> std::string TestStringC_STR() { std::string strTest = "This is a test."; return strTest; } int main() { const char *pc = TestStringC_STR().c_str(); std::cout << pc << std::endl; return 0; } ~~~ 上面代碼編譯器不會報錯! 但是等等,別高興太早,看看輸出結果,為空,不是我們期望的。 關鍵是,我們沒有將TestStringC_STR()的結果賦給一個string對象就直接獲取其指針了,這時,系統并不會為string調用拷貝構造函數或是賦值函數,返回的string仍然只是一個臨時對象的狀態,它會在完成對pc的賦值后被銷毀,這時其內部的數據也不會存在了。 解決方法:先用一個string接收函數的返回值,然后再調用c_str()方法: ~~~ #include<iostream> #include<string> std::string TestStringC_STR() { std::string strTest = "This is a test."; return strTest; } int main() { std::string str1 = TestStringC_STR(); const char *pc = str1.c_str(); std::cout << pc << std::endl; return 0; } ~~~
                  <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>

                              哎呀哎呀视频在线观看