C++ 如何将字符串文本传递给C++;?

C++ 如何将字符串文本传递给C++;?,c++,string,call-by-value,C++,String,Call By Value,考虑以下代码: void consumeString(std::string str){ /* some code */ } void passStringObject(){ std::string stringObject = "string literal"; consumeString(stringObject); } void passStringLiteral(){ consumeString("string literal"); } 现在考虑以下两种情况: 1)

考虑以下代码:

void consumeString(std::string str){
  /* some code */
}

void passStringObject(){
  std::string stringObject = "string literal";
  consumeString(stringObject);
}

void passStringLiteral(){
  consumeString("string literal");
}

现在考虑以下两种情况:

1) 调用函数
passStringObject()

2) 调用函数
passStringLiteral()

在案例1中,我假设-在调用
passStringObject
中的函数
consumeString
时,-变量
stringObject
刚刚传递给函数
consumeString
,并且(由于按值调用)调用string类的复制构造函数,以便参数str是传递给函数
consumeString
的变量
stringObject
的副本


但是当调用函数
consumeString
时,情况2中会发生什么?在调用复制构造函数并将“隐藏”变量的值复制到参数
str

之前,是否隐式调用了string类的(重载)赋值运算符(可能将文本分配给后台的某个“隐藏”变量?),创建一个临时的
std::string
对象,然后将其复制到参数中。

在案例2中,将在对象传递到
consumeString
之前调用
std::string(const char*)
构造函数,然后将复制临时字符串对象。

字符串文本生成临时
std::string
对象

临时对象的生存期与创建它的C++指令绑定。< /P>


std::string stringObject=“string literal”的情况下
调用
const char*
中的构造函数来创建对象(这不是临时的)。

在案例1中,您是创建对象的人,当调用函数时,将调用string类的复制构造函数并复制字符串

在第二种情况下,调用参数化构造函数(使用
char*
参数)来构造字符串对象


在情况2中,
consumeString
返回时,将立即调用析构函数string类,在第一种情况下,
consumeString
函数中的临时变量和
passStringObject
中的其他变量将调用析构函数两次

在案例1中,字符串对象在本地内存堆中创建,我们将该对象传递给调用方


在案例2中,字符串对象在堆栈中创建,并将该对象传递给调用函数,返回时自动删除它

将创建一个临时的
std::string
实例并在案例2中使用