我有两个关于 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;
}
最佳答案
Q1:返回string&
返回对原始字符串的引用。返回 string
返回原始字符串的拷贝。此外,返回 string&
使函数调用表达式成为左值,而返回 string
使其成为右值。
Q2:(string)str
创建了一个从 str
初始化的临时 std::string
。因此它是一个右值。但是 func
期望它的参数是一个左值,因为参数是一个非 const
左值引用。
关于C++ 将字符串引用传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22088974/