string作为c ++函数中的返回值

时间:2015-10-14 11:12:39

标签: c++ string function return-value

这是一个基本问题,但我并不完全理解这一点。 当我有这样的功能时:

string func(){
        string result;
        result = "resultString";

        return result;
}

这是正常的还是字符串结果只是一个局部变量(可以超出范围)?

如果没问题,为什么?这是一个值的回报吗?

c ++中的哪些类型是按值返回的,是什么引用?

2 个答案:

答案 0 :(得分:4)

  

这样可以,或者字符串结果只是局部变量吗?

这很好。返回一个值,但可能会受到NRVO的约束。

  

如果没问题,为什么?这是一个值的回报吗?

是。您将string写为返回类型,这意味着值。

  

c ++中的哪些类型是按值返回的,是什么引用?

在C ++中你可以很好地控制它。 string f();表示返回类型string的值的函数。 string& f();返回对此值的引用。

答案 1 :(得分:-1)

  

如果没问题,为什么?这是一个值的回报吗?

作为对上一个答案的补充,我说结果是一个局部变量;因为func()原型指定返回是按值而不是引用,c ++编译器实际上会调用std :: string复制构造函数来初始化func()返回值和结果局部变量的副本(请注意,如果没有提供复制构造,则你的代码,c ++编译器会创建一个,只能实现浅拷贝)