这是一个基本问题,但我并不完全理解这一点。 当我有这样的功能时:
string func(){
string result;
result = "resultString";
return result;
}
这是正常的还是字符串结果只是一个局部变量(可以超出范围)?
如果没问题,为什么?这是一个值的回报吗?
c ++中的哪些类型是按值返回的,是什么引用?
答案 0 :(得分:4)
这样可以,或者字符串结果只是局部变量吗?
这很好。返回一个值,但可能会受到NRVO的约束。
如果没问题,为什么?这是一个值的回报吗?
是。您将string
写为返回类型,这意味着值。
c ++中的哪些类型是按值返回的,是什么引用?
在C ++中你可以很好地控制它。 string f();
表示返回类型string
的值的函数。 string& f();
返回对此值的引用。
答案 1 :(得分:-1)
如果没问题,为什么?这是一个值的回报吗?
作为对上一个答案的补充,我说结果是一个局部变量;因为func()原型指定返回是按值而不是引用,c ++编译器实际上会调用std :: string复制构造函数来初始化func()返回值和结果局部变量的副本(请注意,如果没有提供复制构造,则你的代码,c ++编译器会创建一个,只能实现浅拷贝)