考虑以下代码:
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 中,我会假设 - 当在其中调用函数时consumeString
-passStringObject
变量stringObject
只是传递给函数consumeString
并且(因为按值调用)调用字符串类的复制构造函数,以便参数 str 是stringObject
传递给函数的变量consumeString
。
但是在第 2 种情况下consumeString
调用函数时会发生什么?在调用复制构造函数并将“隐藏”变量的值复制到参数之前,是否隐式调用了字符串类的(重载)赋值运算符(可能将文字分配给后台的某个“隐藏”变量?)str
?