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

标签 c++ string

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

  1. 表达式 string func(string & s) 的工作方式与 string & func(string & s) 类似,但是如何确定返回值是否正确?是引用性的还是非引用性的?
  2. 为什么我不能改用 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/

相关文章:

c++ - 如何使用指针从不同的函数访问局部变量?

c# - 在 C# 中用换行符拆分字符串

python 将字符串 "0"转换为 float 给出错误

string - 如何在 Bash 中将一个字符串与多个正确值进行比较?

Java忽略字符串匹配中的特殊字符

c++ - 检索具有非常量变量的真值表的单行

c++ - 用类别表示有根树

c++ - 前向声明的类型模板可以参与模板特化吗?

c++ - 在 Ubuntu 11.10 下链接 boost_thread 失败

c - 如何只删除字符串中的第一个空格? C语言