我有两个关于C ++字符串的问题:
string func(string & s)
的工作方式与string & func(string & s)
类似,但您如何确定返回值是引用还是非引用?func((string)str)
?
代码如下,包括显示我对问题1和2的意图的评论:
#include <iostream>
#include <string>
using namespace std;
//Q1:string func(string & s){
string & func(string & s){
s[2]='S';
return s;
}
int main(){
char str[]={'H','H','H','H'};
string name="HHHHH";
//Q2:string tmp=(string)str;
//string rest=func(tmp);
string rest=func((string)str);
cout<<"rest"<<rest;
}
答案 0 :(得分:3)
Q1:返回string&
会返回对原始字符串的引用。返回string
会返回原始字符串的副本。此外,返回string&
使函数调用表达式成为左值,而返回string
使其成为右值。
Q2:(string)str
创建一个从std::string
初始化的临时str
。因此它是一个左值。但是func
期望它的参数是左值,因为参数是非const
左值参考。