如何在 C++ 中從函式中返回一個字串

Jinku Hu 2023年1月30日 2020年11月7日
  1. 使用 std::string func() 從 C++ 中的函式中返回字串
  2. 使用 std::string &func() 記法從函式中返回字串
  3. 使用 char *func() 記法從函式中返回字串
如何在 C++ 中從函式中返回一個字串

本文介紹了幾種在 C++ 中如何從函式中返回字串的方法。

使用 std::string func() 從 C++ 中的函式中返回字串

按值返回是從函式返回字串物件的首選方法。因為 std::string 類有 move 建構函式,所以即使是長字串,通過值返回也是高效的。如果一個物件有一個 move 建構函式,那麼它就被稱為具有移動語義的特性。移動語義意味著在函式返回時,物件不會被複制到不同的位置,因此,提供更快的函式執行時間。

#include <iostream>
#include <algorithm>
#include <iterator>

using std::cout; using std::endl;
using std::string; using std::reverse;

string ReverseString(string &s){
    string rev(s.rbegin(), s.rend());
    return rev;
}

int main() {
    string str = "This string shall be reversed";

    cout << str << endl;
    cout << ReverseString(str) << endl;

    return EXIT_SUCCESS;
}

輸出:

This string shall be reversed
desrever eb llahs gnirts sihT

使用 std::string &func() 記法從函式中返回字串

這個方法使用了通過引用返回的符號,這可以作為解決這個問題的另一種方法。儘管通過引用返回是返回大型結構或類的最有效的方法,但在這種情況下,與前一種方法相比,它不會帶來額外的開銷。注意,你不應該用引用來替換函式中宣告的區域性變數,這會導致懸空引用。

#include <iostream>
#include <algorithm>
#include <iterator>

using std::cout; using std::endl;
using std::string; using std::reverse;

string &ReverseString(string &s) {
    reverse(s.begin(), s.end());
    return s;
}

int main() {
    string str = "Let this string be reversed";

    cout << str << endl;
    cout << ReverseString(str) << endl;

    return EXIT_SUCCESS;
}

輸出:

Let this string be reversed
desrever eb gnirts siht teL

使用 char *func() 記法從函式中返回字串

另外,我們也可以使用 char *從函式中返回一個字串物件。請記住,std::string 類以連續陣列的形式儲存字元。因此,我們可以通過呼叫內建的 data() 方法返回一個指向該陣列中第一個 char 元素的指標。然而,當返回 std::string 物件的空端字元陣列時,請確保不要使用類似的 c_str() 方法,因為它取代了指向第一個 char 元素的 const 指標。

#include <iostream>
#include <algorithm>
#include <iterator>

using std::cout; using std::endl;
using std::string; using std::reverse;

char *ReverseString(string &s) {
    reverse(s.begin(), s.end());
    return s.data();
}

int main() {
    string str = "This string must be reversed";

    cout << str << endl;
    cout << ReverseString(str) << endl;

    return EXIT_SUCCESS;
}

輸出:

This string must be reversed
desrever eb tsum gnirts sihT
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相關文章 - C++ String