字符串从C ++中的成员函数返回

时间:2014-11-15 19:57:45

标签: c++ compilation

我是一名程序员,刚刚开始使用c ++。在c中如果我们从函数返回地址,我们传递的地址将无效,直到除非我们动态分配该内存。 但是在C ++中,我确实没有分配内存来存储字符串。 是字符串的地址" a"即使从函数copy_string返回后也会有效。 为什么在main函数中返回正确的字符串?

#include <iostream>
#include <string>

using namespace std;

class String_copy{
public:
        string str1;
        string str2;
        string copy_string(string str);
  };

  string String_copy::copy_string(string str)
  {
          string a;
          string b;

          b="Hello World!";

          a = str+" "+b;
          return a;
  }

  int main(void)
  {
    String_copy str;
    str.str1="Wooo";
    str.str2 = str.copy_string(str.str1);
    cout << "Final string is \"" << str.str2 << "\"" << endl;
    return 0;
  }

1 个答案:

答案 0 :(得分:0)

在C和C ++中,与C#和Java相反,变量不需要在动态内存中分配,动态内存包括字符串和字符数组。

如果需要想要从函数返回指针,它们必须指向一个在执行离开函数后不会消失的变量。两种流行的技术是使用从动态内存分配的static变量或变量。执行离开函数后,static和动态分配的变量都将存在。

您可能会将std::string与C样式字符数组混淆。 std::string类是一个对象,可以从整数或双精度函数返回。

从技术上讲,可以在不使用指针的情况下从函数返回C样式字符串。就像返回一个整数数组一样。

C中的常见做法是返回指向数组的指针,以避免复制大型数据结构。所以惯例是返回一个指向C-Style字符串的指针,目标必须是static或动态分配,所以指针的目标在执行离开函数后不会消失。