C ++将字符串引用传递给函数

时间:2014-02-28 07:32:02

标签: c++ string

我有两个关于C ++字符串的问题:

  1. 表达式string func(string & s)的工作方式与string & func(string & s)类似,但您如何确定返回值是引用还是非引用?
  2. 为什么我不能使用func((string)str)

  3. 代码如下,包括显示我对问题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;
    }
    

1 个答案:

答案 0 :(得分:3)

Q1:返回string&会返回对原始字符串的引用。返回string会返回原始字符串的副本。此外,返回string&使函数调用表达式成为左值,而返回string使其成为右值。

Q2:(string)str创建一个从std::string初始化的临时str。因此它是一个左值。但是func期望它的参数是左值,因为参数是非const左值参考。